Javascript XPath。如何选择所有文本节点,但仅选择';选项';在';选择';要素

Javascript XPath。如何选择所有文本节点,但仅选择';选项';在';选择';要素,javascript,xpath,Javascript,Xpath,我需要获取所有文本节点 但是当选择元素位于页面上时(该页面包含一些选项元素)。只有一个选项元素可见,应跳过其他元素 HTML(只是一个示例): 你好 世界 一 二 三 我使用以下javascript代码来使用xpath: 函数aaa(){ XPathResult.of=函数(选择器){ 返回document.evaluate(选择器,document,null,XPathResult.ANY_类型,null); }; XPathResult.prototype.toArray=函数(){

我需要获取所有文本节点

但是当
选择
元素位于页面上时(该页面包含一些选项元素)。只有一个
选项
元素可见,应跳过其他元素

HTML(只是一个示例):



你好
世界
一
二
三

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

函数aaa(){
XPathResult.of=函数(选择器){
返回document.evaluate(选择器,document,null,XPathResult.ANY_类型,null);
};
XPathResult.prototype.toArray=函数(){
var节点=[];
var节点=null;
而((node=this.iterateNext()){
nodes.push(节点);
}
返回节点;
};
返回XPathResult.of(“//body//text()|后代::option[@selected]”)
.toArray()
.map(函数(节点){
if(node.nodeName=='OPTION'){return node.value;}
if(node.nodeName='#text'){return node.data.trim();}
抛出新错误(“未知节点类型:“+节点”);
})
.filter(函数(文本){return text.length;})
}
其结果是:

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

但应该是

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

请帮助完成所需的xpath

//body//text()
将返回文档中的每个文本节点
//body//text()| genderant::option[@selected]
将返回文档中每个文本节点和当前元素的每个
后代的并集,当前元素仍然是文档中的每个文本节点

如果希望文档中除
元素外的每个文本节点都没有
@选定的
属性,可以执行类似操作以过滤掉不需要的元素:

//body//text()[not(parent::option[not(@selected)])]
使用XPath联合(
|
)组合XPath的结果,以获取不在
标记内且不是空文本节点的所有文本节点:

//body//text()[not(parent::option) and normalize-space(.)]
。。。使用XPath获取选定
节点中的所有文本节点:

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

//body//text()[parent::option[@selected]] | //body//text()[not(parent::option) and normalize-space(.)]
在这个问题中,给定HTML输入,上述XPath的输出将是
[“hello”,“world”,“three”]