2017-07-07 10 views
3

"temp"(属性値ではない)で始まる属性名を持つ要素の配列を取得しようとしています。 querySelectorAllを使用してください)。XPathを使用して特定の文字列で始まる属性名を持つ要素のリストを取得する

しかし、私はxpath式を正しく得ることができないようです。ここで私が作ってみた最も近いように思われるものである:「TEMP」私はそれが私と少なくとも1の属性が含まれている3つのdivを与えるだろうと仮定します

let els = Array.from(document.evaluate(
 
    `//*/@*[starts-with(name(.), 'temp')]`, 
 
    document, 
 
    null, 
 
    XPathResult.FIRST_ORDERED_NODE_TYPE, 
 
    null 
 
).singleNodeValue); 
 

 
console.log(els);
<div temp-callback="1" temp-post-callback="4"></div> 
 
<div temp-callback="2"></div> 
 
<div></div> 
 
<div temp-callback="8" temp-post-callback="7"></div>

私には何が欠けていますか?

答えて

3

は、私はあなたがフィルタリング条件として、属性名のチェックを適用しながら、あなたのXPathで要素のマッチングを探していると思う:

//*[@*[starts-with(name(), 'temp')]] 

var result = document.evaluate("//*[@*[starts-with(name(), 'temp')]]", document, null, XPathResult.ANY_TYPE, null); 
 

 
var node = result.iterateNext(); 
 
var nodes = []; 
 
while (node) { 
 
    nodes.push(node); 
 
    node = result.iterateNext(); 
 
} 
 
console.log(nodes);
<div temp-callback="1" temp-post-callback="4"></div> 
 
<div temp-callback="2"></div> 
 
<div></div> 
 
<div temp-callback="8" temp-post-callback="7"></div>

+0

ああ、OK。これははるかに理にかなっています。ありがとうございました – KevBot

関連する問題