Xenotyp
Themenersteller
Guru (153 Beiträge)

AMP + HTML5 Validator (Seite 2)


d_spaete
Avatar d_spaete
Webentwickler
Fortgeschrittener (59 Beiträge)
am 25.08.2017, 16:37 Uhr schrieb d_spaete

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
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 25.08.2017, 16:55 Uhr schrieb matthes

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
Avatar d_spaete
Webentwickler
Fortgeschrittener (59 Beiträge)
am 25.08.2017, 17:22 Uhr schrieb d_spaete

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
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 25.08.2017, 18:22 Uhr schrieb matthes

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
Avatar d_spaete
Webentwickler
Fortgeschrittener (59 Beiträge)
am 25.08.2017, 18:37 Uhr schrieb d_spaete

Jo, die hatte ich übersehen.

document.querySelectorAll("nav li:not([class]):not(:last-child) a")


matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 25.08.2017, 18:41 Uhr schrieb matthes

Ja, das ist sehr gut.

Was schuldet uns Xeno jetzt? Machst du die Rechnung und zahlst mich aus?


Make Seitenreport great again!

Xenotyp
Guru (153 Beiträge)
am 28.08.2017, 10:03 Uhr schrieb Xenotyp

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
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 28.08.2017, 23:12 Uhr schrieb matthes

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!

Xenotyp
Guru (153 Beiträge)
am 29.08.2017, 10:46 Uhr schrieb Xenotyp

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
Avatar d_spaete
Webentwickler
Fortgeschrittener (59 Beiträge)
am 29.08.2017, 11:28 Uhr schrieb d_spaete

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]);
}
}




« zurück zu: HTML5 & CSS

Das Seitenreport Forum hat aktuell 5273 Themen und 36107 Beiträge.
Insgesamt sind 48345 Mitglieder registriert.