Jsoup select - 为什么它包含当前元素?
Jsoup select - why does it include current element?
我想知道我是否遗漏了什么,因为我觉得很奇怪为什么 Jsoup 在 select
.
执行的搜索中包含当前元素
例如(scala代码):
val el = doc.select("div").first
el.select("div").contains(el) // => true
这有什么意义?我看到你真正想要这个的情况非常有限。我是否需要始终使用 el.children.select
来代替?有更好的方法吗?
附带问题:有没有更好的方法 el.children.select(s).first
?在 Ruby Nokogiri 中,它会是 el.at_css(s)
,它更短,Jsoup 中是否有类似的选项?
至于为什么 select
方法是这样实现的,我唯一的猜测是,如果我们考虑保存由您生成的数据的结构,这是最直接的方法询问。
如果我们考虑 el
,我们会发现它是您要求的元素的 "tree" 表示,第一个父 div 节点作为根节点。然后你在那棵树上调用 select
。现在这一切都取决于你决定如何看待这棵树。我们应该将这个 "tree" 视为一个整体(包括根)还是不(丢弃根)?我想这是一个品味问题。
如果我自己判断,很多使用 Jsoup 的人可能对 DOM 使用 jQuery 进行解析有一些经验。等效的是这样的 $("div").first().find("div")
其中 find
被记录为
Get the descendants of each element in the current set of matched
elements, filtered by a selector, jQuery object, or element.
这与你所说的一致。这只是两个库如何 "see" 结果树的问题。 Jsoup 将根视为节点之一,jQuery 区分根(就 find
而言)。
关于你问题的第二部分。
val el = doc.select("div").first
el.children.select(s).first
不,没有。唯一的方法是更改 css 选择器。
val result = doc.select("div:eq(0) " + s).first;
我想知道我是否遗漏了什么,因为我觉得很奇怪为什么 Jsoup 在 select
.
例如(scala代码):
val el = doc.select("div").first
el.select("div").contains(el) // => true
这有什么意义?我看到你真正想要这个的情况非常有限。我是否需要始终使用 el.children.select
来代替?有更好的方法吗?
附带问题:有没有更好的方法 el.children.select(s).first
?在 Ruby Nokogiri 中,它会是 el.at_css(s)
,它更短,Jsoup 中是否有类似的选项?
至于为什么 select
方法是这样实现的,我唯一的猜测是,如果我们考虑保存由您生成的数据的结构,这是最直接的方法询问。
如果我们考虑 el
,我们会发现它是您要求的元素的 "tree" 表示,第一个父 div 节点作为根节点。然后你在那棵树上调用 select
。现在这一切都取决于你决定如何看待这棵树。我们应该将这个 "tree" 视为一个整体(包括根)还是不(丢弃根)?我想这是一个品味问题。
如果我自己判断,很多使用 Jsoup 的人可能对 DOM 使用 jQuery 进行解析有一些经验。等效的是这样的 $("div").first().find("div")
其中 find
被记录为
Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
这与你所说的一致。这只是两个库如何 "see" 结果树的问题。 Jsoup 将根视为节点之一,jQuery 区分根(就 find
而言)。
关于你问题的第二部分。
val el = doc.select("div").first
el.children.select(s).first
不,没有。唯一的方法是更改 css 选择器。
val result = doc.select("div:eq(0) " + s).first;