2016-04-25 27 views
1

でXPathを持つ文字列を含むすべての要素を見つける:は、私は、文字列を含むすべての要素を取得しようとしているJavaScriptの

function getElementsByText(text, ctx) { 
    return document.evaluate(
     "//*[.='"+text+"']", 
     ctx || document, 
     null, 
     XPathResult.ORDERED_NODE_ITERATOR_TYPE, 
     null 
    ).iterateNext(); 
} 

var searchString = "Name"; 
var parents = getElementsByText(searchString); 

for (var i = 0; i < parents.length; i++) { 
    parents[i].style.opacity = .2; 
}; 

ドキュメントはevaluateORDERED_NODE_ITERATOR_TYPEとリターン「という表現にマッチするすべてのノードを」と言います。ただし、getElementsByTextは、最初のオカレンスのみを返します。

parentsは反復可能ではないため、このコードは機能しません。

どのようにすべての要素を取得できますか?

+1

この例を参照してください。http://jsfiddle.net/Xotic750/kjD8r/ –

答えて

2

evaluateメソッドを呼び出すと、iterateNextに電話する必要があるhttps://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResultが表示され、選択したノードセットの次のノードが必要な場合に限ります。あなたが配列を持っていたいなら、例えば以下のようにします。

function getElementsByText(text, ctx) { 
    var results = []; 
    var xpathResult = document.evaluate(
     "//*[.='"+text+"']", 
     ctx || document, 
     null, 
     XPathResult.ORDERED_NODE_ITERATOR_TYPE, 
     null 
    ); 
    var node; 
    while ((node = xpathResult.iterateNext()) != null) { 
    results.push(node); 
    } 
    return results; 
} 
関連する問題