Update 2017
Die ursprüngliche Antwort unten geht davon aus, dass das OP nicht leere Textknoten und andere Knotentypen sowie Elemente enthalten möchte. Aus der Frage, ob dies eine gültige Annahme ist, scheint mir jetzt nicht klar zu sein.
Angenommen, Sie möchten stattdessen nur den Elementindex, previousElementSibling
wird jetzt gut unterstützt (was 2012 nicht der Fall war) und ist jetzt die offensichtliche Wahl. Das Folgende (was mit einigen anderen Antworten hier identisch ist) funktioniert in allen wichtigen Bereichen außer IE <= 8.
function getElementIndex(node) {
var index = 0;
while ( (node = node.previousElementSibling) ) {
index++;
}
return index;
}
Ursprüngliche Antwort
Verwenden previousSibling
Sie einfach, bis Sie treffen null
. Ich gehe davon aus, dass Sie nur Leerzeichen-Textknoten ignorieren möchten. Wenn Sie andere Knoten filtern möchten, passen Sie sie entsprechend an.
function getNodeIndex(node) {
var index = 0;
while ( (node = node.previousSibling) ) {
if (node.nodeType != 3 || !/^\s*$/.test(node.data)) {
index++;
}
}
return index;
}