繁体   English   中英

Jsoup select-为什么它包含当前元素?

[英]Jsoup select - why does it include current element?

我试图了解是否丢失了某些内容,因为对于我来说,为什么Jsoup在select执行的搜索中包含当前元素似乎很奇怪。

例如(标量代码):

val el = doc.select("div").first
el.select("div").contains(el) // => true

这有什么意义呢? 在少数情况下,您实际上需要这样做。 我是否需要始终使用el.children.select代替? 有更好的方法吗?

el.children.select(s).first问题:是否有更好的方法来执行el.children.select(s).first 在Ruby Nokogiri中,它将是el.at_css(s) ,它要短得多,Jsoup中是否有类似的选择?

至于为什么以这种方式实现select方法,我唯一的猜测是,如果考虑到保存查询结果的结构,这是最简单的方法。

如果考虑el ,我们将看到它是您要的元素的“树”表示形式,以第一个父div节点为根。 然后在那棵树上调用select 现在,这一切都取决于您决定看这棵树的方式。 我们是否应该整体上(包括根)(丢弃根)对待这棵“树”? 我想这是一个品味问题。

如果从我自己判断,很多使用Jsoup的人可能在jQuery的DOM解析方面有一些经验。 等价的东西类似于这样的$("div").first().find("div") ,其中find被记录为

获取当前匹配元素集中每个元素的后代 ,并通过选择器,jQuery对象或元素进行过滤。

这与您所说的一致。 这只是两个库如何“看到”结果树的问题。 Jsoup将根视为节点之一,jQuery区分根(就find而言)。

关于问题的第二部分。

val el = doc.select("div").first
el.children.select(s).first

不,没有。 唯一的方法是更改​​css选择器。

val result = doc.select("div:eq(0) " + s).first;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM