Xenotyp
Themenersteller
Guru (153 Beiträge)
AMP + HTML5 Validator (Seite 2)
d_spaete
Webentwickler
Fortgeschrittener (59 Beiträge)
Matthes schrieb:
Lösung: in ajaxify_link prüfen, ob das Element ein a oder ein span ist und bei letzterem abbrechen. Fertig.
...oder das id-Attribut aus den span\'s entfernen, wie es hier schon der Fall ist:
xeno-4aa45.firebaseapp.com/en/stuff.html
matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
Stimmt, die werden sonst ja gar nicht verwendet. Sieht nach der simpleren Lösung aus, aber das dürfte Fehler auswerfen, weil die ganze ajaxify-Kette scheitert.
PS [17:02 Uhr]: Ich würde diese Festlegung ganz lassen, das ist unpraktisch in der Wartung. Neuer Menüpunkt? JavaScript öffnen, bearbeiten, ...
document.querySelectorAll("li:not([class]) a[id]") - fertig. Iterieren, an ajaxify_link übergeben, fertig. Keine Prüfung notwendig, keine hardcoded ID-Selektoren.
Make Seitenreport great again!
d_spaete
Webentwickler
Fortgeschrittener (59 Beiträge)
Auch wieder wahr. Dann so:
[javascript]function ajaxify_link(link_element) {
if (link_element === null) return;[/javascript]
Für die reine Abfrage des Vorhandenseins brauchen wir dann aber auch keine id mehr. Also dann etwas wie
document.querySelectorAll("nav li:not([class]) a")
matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
d_spaete schrieb:
Auch wieder wahr. Dann so:
[javascript]function ajaxify_link(link_element) {
if (link_element === null) return;[/javascript]
Für die reine Abfrage des Vorhandenseins brauchen wir dann aber auch keine id mehr. Also dann etwas wie
document.querySelectorAll("nav li:not([class]) a")
Wir brauchen etwas, um die Menü-Links vom Sprachlink zu unterscheiden, deshalb die ID. Das ginge auf etliche andere Weisen auch, aber die würden aufgeblähtere Konstrukte erfordern.
Von daher würde ich meine Variante bevorzugen, dann braucht es auch keine Prüfung, ob das Link-Element überhaupt existiert und ein gewünschtes ist.
PS [18:23 Uhr]: Man könnte natürlich die IDs weglassen und das letzte Element nicht verwenden, indem man nur bis zu $Länge-1 durch das Array geht. Das wäre nicht sonderlich aufgebläht.
Make Seitenreport great again!
d_spaete
Webentwickler
Fortgeschrittener (59 Beiträge)
Jo, die hatte ich übersehen.
document.querySelectorAll("nav li:not([class]):not(:last-child) a")
matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
Ja, das ist sehr gut.
Was schuldet uns Xeno jetzt? Machst du die Rechnung und zahlst mich aus?
Make Seitenreport great again!
Hi ihr beiden. Ich hatte am Freitag Mittag noch die Version ohne IDs in dem Span Element getestet, allerdings funktioniert dann die Ajax Geschichte gar nicht (quasi als wäre kein Script vorhanden). Am Wochenende kam ich gar nicht dazu zu schauen, jetzt seh ich erstmals eure Vorschläge. Ich muss gestehen, ich hatte damals den Vorschlag von Matthes ausprobiert, allerdings hab ich irgendwo einen Syntaxfehler gehabt, den ich nicht gerade biegen konnte. Autodidaktisch ist Javascript echt schwer zu peilen. \'
Ich teste gerade eure letzten Ideen. Allerdings tu ich mich da wirklich schwer. Mal sehen ob ich das gleich noch korrekt zusammenschreiben kann. Vielen Dank schon einmal. :]
matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
Xenotyp schrieb:
allerdings hab ich irgendwo einen Syntaxfehler gehabt, den ich nicht gerade biegen konnte. Autodidaktisch ist Javascript echt schwer zu peilen. \'
Du kannst immer gerne fragen. Auf allen Kanälen, jederzeit.
Xenotyp schrieb:
Ich teste gerade eure letzten Ideen. Allerdings tu ich mich da wirklich schwer. Mal sehen ob ich das gleich noch korrekt zusammenschreiben kann. Vielen Dank schon einmal. :]
Gerne, ich finde das klasse. Wie oft haben wir hier schon Leute, die sich über Hilfe freuen und begierig sind, sich zu verbessern?
Make Seitenreport great again!
document.querySelectorAll("nav li:not([class]):not(:last-child) a")
Wo ich diesen Part einbaue, habe ich noch nicht raus. Alle Einbauten sind irgendwie gescheitert. Das Scheitern zeigt sich dann so, dass der Effekt dass die Seite nicht komplett neulädt, ganz einfach nicht da ist. Unten habe ich eine meine Einbauversuche einmal angehangen. Könnt ihr mir noch einmal unter die Arme greifen?
Ursprüngliche Datei
var readyStateCheckInterval = self.setInterval(function() {
if (document.readyState === "complete") {
clearInterval(readyStateCheckInterval);
setupLinks();
popStateHandler();
}
}, 10);
function setupLinks() {
ajaxify_link(document.getElementById("index"));
ajaxify_link(document.getElementById("avp2k9"));
ajaxify_link(document.getElementById("design"));
ajaxify_link(document.getElementById("smilies"));
ajaxify_link(document.getElementById("stuff"));
}
function ajaxify_link(link_element) {
link_element.onclick = null;
if (!link_element.addEventListener) {
link_element.attachEvent("onclick", function(e) {
e.returnValue = false;
changeBrowserURL(link_element);
getPage(link_element.href);
}, false);
}
else {
link_element.addEventListener("click", function(e) {
e.preventDefault();
changeBrowserURL(link_element);
getPage(link_element.href);
}, false);
}
}
Geänderte Version:
var readyStateCheckInterval = self.setInterval(function() {
if (document.readyState === "complete") {
clearInterval(readyStateCheckInterval);
setupLinks(); <--- nicht mehr benötigt? ###
popStateHandler();
}
}, 10);
function setupLinks() { <--- nicht mehr benötigt? ###
ajaxify_link(document.getElementById("index"));
ajaxify_link(document.getElementById("avp2k9"));
ajaxify_link(document.getElementById("design"));
ajaxify_link(document.getElementById("smilies"));
ajaxify_link(document.getElementById("stuff"));
}
function ajaxify_link(link_element) {
if (link_element === null) return; <--- hinzugefügt ###
document.querySelectorAll("nav li:not([class]):not(:last-child) a");
^ testweise in div. Schreibweisen hinzugefügt, hier vermutlich völlig falsch? ###
if (!link_element.addEventListener) {
link_element.attachEvent("onclick", function(e) {
e.returnValue = false;
changeBrowserURL(link_element);
getPage(link_element.href);
}, false);
}
else {
link_element.addEventListener("click", function(e) {
e.preventDefault();
changeBrowserURL(link_element);
getPage(link_element.href);
}, false);
}
}
d_spaete
Webentwickler
Fortgeschrittener (59 Beiträge)
Matthes schrieb:
Was schuldet uns Xeno jetzt? Machst du die Rechnung und zahlst mich aus?
Das hatte ich gar nicht gelesen. Wahrscheinlich war ich zu fasziniert von diesen 5 goldenen Sternen. Ja, ich mache die Rechnung dann zum Monatswechsel fertig. Wer weiß, was da noch dazu kommt.
@Xeno:
Wenn ich gerade nichts übersehe, täte ich nur die setupLinks()-Funktion anpassen und Rest so wie im Original belassen:
function setupLinks() {
var links = document.querySelectorAll("nav li:not([class]):not(:last-child) a");
for (var i = 0; i < links.length; i++) {
ajaxify_link(links[i]);
}
}
Das Seitenreport Forum hat aktuell 5275 Themen und 36110 Beiträge.
Insgesamt sind 48360 Mitglieder registriert.
Beitrag erstellen
EinloggenKostenlos registrieren