选择第一亲本的最有效,最通用的方法是什么,该方法包含文本序列“快速的棕色狐狸跳过懒狗”。 (此外,无需依赖父母是div的知识)
我正在寻找一个性能较高的通用查询,以选择“快速的棕色狐狸跳过了懒狗。”,但看来我实际上需要使用textContent
:(单击DOM中的节点→ $ 0.textContent):`
"
The
quick brown fox
jumped over the
lazy dog.
"
即使通过了这种荒谬的格式,我的XPath也会选择祖先(不超过身体),而不仅仅是第一个(很少)祖先。如何限制范围?
运行代码段→整页→按照说明进行操作
<div id='dont-select-this' style='text-align:center'>
<div id='dont-select-this-but-it-would-be-cool-if-you-could' style='background:lightgreen;'>
<div id='select-this-one'>
<p>
<span>The</span>
<em>quick brown fox</em>
<span>jumped over the</span>
</p>
<p>
lazy<span> </span><b>dog.</b>
</p>
</div>
</div>
<hr>
<div>open chrome devtools → console</div>
<div>change frame (see below)</div>
<div>type <code>$x('//*[contains(., "quick brown fox")]')</code></div>
<hr>
<img alt='select chrome devtools frame' height=300 src='https://i.imgur.com/L1MhCY8.png'/>
</div>
答案 0 :(得分:1)
此XPath,
//div[normalize-space() = 'The quick brown fox jumped over the lazy dog.']
仅选择具有以下div
值的两个@id
元素,
dont-select-this-but-it-would-be-cool-if-you-could
select-this-one
根据要求。
如果您实际上想排除div
值为id
(尽管名称为dont-select-this-but-it-would-be-cool-if-you-could
)的div
元素,并且 only 选择带有记录的字符串值,然后:
*
更改为//*[ normalize-space() = 'The quick brown fox jumped over the lazy dog.' ]
[not(.//*[normalize-space() = 'The quick brown fox jumped over the lazy dog.' ])]
。一起:
div
这仅选择id
属性值为select-this-one
的{{1}}。
答案 1 :(得分:0)
最终与此一起
//*[ contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.') ]
[not(.//*[contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.') ])]
$x("//*[contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.')][not(.//*[contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.') ])]")