我正在尝试获取包含字符串的所有元素:
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;
};
文档说evaluate
ORDERED_NODE_ITERATOR_TYPE
返回“与表达式匹配的所有节点”。但getElementsByText
仅返回第一次出现。
此代码不起作用,因为parents
不可迭代。
我如何获得所有元素?
答案 0 :(得分:2)
如果您调用evaluate
方法,只要您想要所选节点集的下一个节点,就需要https://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult来调用iterateNext
。如果你想拥有一个数组,那就行了。
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;
}