2017年の更新
以下の元の回答は、OPが空でないテキストノードと他のノードタイプ、および要素を含めたいと想定していることを前提としています。これが有効な仮定であるかどうかという質問から、今のところ私には明らかではないようです。
代わりに、要素インデックスが必要であると仮定すると、previousElementSibling
現在は十分にサポートされており(2012年にはそうではありませんでした)、今では当然の選択です。以下(ここでの他のいくつかの回答と同じです)は、IE<=8を除くすべてのメジャーで機能します。
function getElementIndex(node) {
var index = 0;
while ( (node = node.previousElementSibling) ) {
index++;
}
return index;
}
元の回答
previousSibling
ヒットするまで使用してくださいnull
。空白のみのテキストノードを無視したいと思います。他のノードをフィルタリングする場合は、それに応じて調整します。
function getNodeIndex(node) {
var index = 0;
while ( (node = node.previousSibling) ) {
if (node.nodeType != 3 || !/^\s*$/.test(node.data)) {
index++;
}
}
return index;
}