[英]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.