使用XPathResult查询包含指定文本p元素时首个匹配结果不显示问题
问题原因
- 进入
while循环前,你已经通过headings.iterateNext()获取到了第一个匹配的<p>元素并赋值给thisHeading,但进入循环后第一行代码又重复调用了一次headings.iterateNext(),直接跳过了第一个匹配结果,取到了第二个元素,因此第一个符合条件的元素没有被设置为显示。 - 额外补充:当迭代到最后一个元素后,
iterateNext()会返回null,原有代码中直接对null调用$(thisHeading).css()还会抛出控制台报错。
修复方案
调整循环内的执行顺序,先处理当前拿到的元素再取下一个迭代结果即可,修复后的JS代码如下:
queryResult = 1; function testQuery() { queryResult = "hello"; if (queryResult == "") { return false; } $("p").css("display", "none"); var headings = document.evaluate("//p[contains(., '" + queryResult + "')]", document, null, XPathResult.ANY_TYPE, null); var thisHeading = headings.iterateNext(); while (thisHeading) { // 先处理当前匹配元素 $(thisHeading).css("display", "block"); // 处理完成后再取下一个迭代结果 thisHeading = headings.iterateNext(); } }
内容的提问来源于stack exchange,提问作者SoaringGecko
相关产品推荐
相关产品推荐

