Java Jsoup如何使jQuery像选择器一样?

Java Jsoup如何使jQuery像选择器一样?,java,jsoup,selector,Java,Jsoup,Selector,我以前使用过jsoup,但我似乎无法理解类似于jquery的选择器是如何定义的。我已经读了源代码,但仍然不明白 public static final class ContainsOwnText extends Evaluator { private String searchText; public ContainsOwnText(String searchText) { this.searchText = searchText.toL

我以前使用过jsoup,但我似乎无法理解类似于jquery的选择器是如何定义的。我已经读了源代码,但仍然不明白

public static final class ContainsOwnText extends Evaluator {
        private String searchText;

        public ContainsOwnText(String searchText) {
            this.searchText = searchText.toLowerCase();
        }

        @Override
        public boolean matches(Element root, Element element) {
            return (element.ownText().toLowerCase().contains(searchText));
        }

        @Override
        public String toString() {
            return String.format(":containsOwn(%s", searchText);
        }
    }
以上可以这样称呼

select("*:containsOwn("+ str + ")");

问题:

有人能给我解释一下这个机器是怎么工作的吗


为什么上面不是这样

return String.format(":containsOwn(%s)", searchText);

我问这个问题是因为我想了解jsoup是如何工作的,不是因为我很难让它工作。我只是想知道是怎么做到的。如果我想用类似jquery的选择器复制这种行为,并想开发类似的东西,我应该怎么做?

当您调用
select(query)
时,将解析该查询以填充一组求值器,然后将其传递给收集器以构造满足查询的一组元素

在这种情况下,第162行上的
containsOwn
操作导致调用第325行上的
containsOwn
方法,从而创建
containsOwn
计算器的实例

此计算器被传递给遍历树的,该树调用每个计算器的
matches
方法。在这种情况下(在
ContainsOwn
中),
matches
方法使用
java.lang.String
contains
方法检查给定字符串是否包含在元素的自身文本中

ContainsOwn
中的
toString
方法已被编写为镜像用于创建它的语法,并且对它的创建方式没有影响(这由QueryParser处理)。缺少闭合括号看起来像是一个无害的打字错误

return String.format(":containsOwn(%s)", searchText);