gpt4 book ai didi

javascript - 路径。如何选择所有文本节点但只选择 'option'元素中的 'select'

转载 作者:行者123 更新时间:2023-11-30 12:40:12 24 4
gpt4 key购买 nike

我需要获取所有文本节点。

但是当 select 元素在页面上时(其中包含一些选项元素)。只有一个 option 元素可见,应跳过其他元素。

HTML(只是一个例子):

<body onload="console.log(aaa());">
<p>
<span>hello</span>
<span>world</span>
<select>
<option>one</option>
<option>two</option>
<option selected>three</option>
</select>
</p>
</body>

我使用以下 javascript 代码来使用我的 xpath:

function aaa() {
XPathResult.of = function(selector) {
return document.evaluate(selector, document, null, XPathResult.ANY_TYPE, null);
};

XPathResult.prototype.toArray = function() {
var nodes = [];
var node = null;
while ( (node = this.iterateNext()) ) {
nodes.push(node);
}
return nodes;
};

return XPathResult.of("//body//text() | descendant::option[@selected]")
.toArray()
.map(function(node) {
if ( node.nodeName == 'OPTION' ) { return node.value; }
if ( node.nodeName == '#text' ) { return node.data.trim(); }
throw new Error("unknown node type: " + node);
})
.filter(function(text) { return text.length; })

}

结果是:

[“你好”,“世界”,“一”,“二”,“三”,“三”]

但应该是

[“你好”,“世界”,“三”]

请帮助完成所需的 xpath

最佳答案

使用 XPath 联合 ( | ) 组合 XPath 的结果以获得所有不在 <option> 内的文本节点标记并且不是空文本节点:

//body//text()[not(parent::option) and normalize-space(.)]

... 使用 XPath 获取所选 <option> 内的所有文本节点节点:

//body//text()[parent::option[@selected]]

组合 XPath:

//body//text()[parent::option[@selected]] | //body//text()[not(parent::option) and normalize-space(.)]

在这个问题中给定 HTML 输入,上述 XPath 的输出将是 ["hello", "world", "three"]

关于javascript - 路径。如何选择所有文本节点但只选择 'option'元素中的 'select',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24759726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com