首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将document.evaluate()的document.evaluate()作为contextNode使用不起作用

将document.evaluate()的document.evaluate()作为contextNode使用不起作用
EN

Stack Overflow用户
提问于 2018-04-05 17:19:47
回答 1查看 335关注 0票数 3

在使用document.evaluate时,我试图再次使用xpathResult作为类似于所附示例的contextNode,但没有成功,我错在哪里?

代码语言:javascript
复制
const getAllLiButton = document.querySelector("#get-all-li");
const getTitleAndTextButton = document.querySelector("#get-title-text");

getAllLiButton.addEventListener("click", getAllLi);
getTitleAndTextButton.addEventListener("click", getTitleAndText);

function getAllLi() {
  var records = [];

  let topLevelResults = document.evaluate("/html/body/ul/li", document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

  var levelResult = topLevelResults.iterateNext();
  while (levelResult) {
    records.push(levelResult);
    
    levelResult = topLevelResults.iterateNext();
  }

  console.log(records);
}

function getTitleAndText() {
  let topLevelResults = document.evaluate("/html/body/ul/li", document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

  var levelResult = topLevelResults.iterateNext();

  let titleText = document.evaluate("/h3", levelResult, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
  console.log(titleText);

  let textBox = document.evaluate("/span", levelResult, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
  console.log(textBox);
}
代码语言:javascript
复制
<button id="get-all-li">Get all li (works)</button>
<button id="get-title-text">Get single Title & Text (not works)</button>

<ul>
  <li><h3>Title #1</h3><span>some text</span></li>
  <li><h3>Title #2</h3><span>some text</span></li>
  <li><h3>Title #3</h3><span>some text</span></li>
  <li><h3>Title #4</h3><span>some text</span></li>
  <li><h3>Title #5</h3><span>some text</span></li>
</ul>

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-05 17:44:34

正如文档中所报道的

代码语言:javascript
复制
document.evaluate(".//h3", levelResult, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null)

.//h3 xpathExpression对于指示查询应该从上下文节点(levelResult)开始非常重要。

代码语言:javascript
复制
const getAllLiButton = document.querySelector("#get-all-li");
const getTitleAndTextButton = document.querySelector("#get-title-text");

getAllLiButton.addEventListener("click", getAllLi);
getTitleAndTextButton.addEventListener("click", getTitleAndText);

function getAllLi() {
    var records = [];

    let topLevelResults = document.evaluate("/html/body/ul/li", document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

    var levelResult = topLevelResults.iterateNext();
    while (levelResult) {
        records.push(levelResult);

        levelResult = topLevelResults.iterateNext();
    }

    console.log(records);
}

function getTitleAndText() {
    let topLevelResults = document.evaluate("/html/body/ul/li", document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

    var levelResult = topLevelResults.iterateNext();

    let titleText = document.evaluate(".//h3", levelResult, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
    titleText = titleText.iterateNext();
    console.log(titleText.textContent);

    let textBox = document.evaluate(".//span", levelResult, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
    textBox = textBox.iterateNext();
    console.log(textBox.textContent);
}
代码语言:javascript
复制
<button id="get-all-li">Get all li (works)</button>
<button id="get-title-text">Get single Title & Text (not works)</button>

<ul>
    <li><h3>Title #1</h3><span>some text</span></li>
    <li><h3>Title #2</h3><span>some text</span></li>
    <li><h3>Title #3</h3><span>some text</span></li>
    <li><h3>Title #4</h3><span>some text</span></li>
    <li><h3>Title #5</h3><span>some text</span></li>
</ul>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49678056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档