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, previousElementSiblingwird 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 previousSiblingSie 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;
}