有没有一种有效的方法来测试一个元素是否与Jsoup中的选择器匹配?

问题描述:

有没有一种有效的方法来检查给定的元素是否匹配选择器,比如jQuery中的is()方法(http://api.jquery.com/is/)?有没有一种有效的方法来测试一个元素是否与Jsoup中的选择器匹配?

我发现这个解决办法,但我认为它有糟糕的表现:

public static String cleanSelector(String selector) { 
    return selector.replaceAll(":link|:active|:visited|:hover|:after|:focus", ""); 
} 

public static boolean elementIs(Element elem, String selector, Element root) { 
    Elements elems = root.select(cleanSelector(selector)); 
    return elems.contains(elem); 
} 

使用包私人QueryParser类:

Evaluator eval = QueryParser.parse(query); 
boolean result = eval.matches(element.ownerDocument(), element); 
+0

我还希望评论关于这个答案如何能没有劫持到私人Jsop包中使用......否则它似乎是无用的。 – 2016-01-05 21:53:30

+1

@XtraCoder现在有'is(String cssSelector)'方法,它正是这样做的。但它尚未在最新版本中发布,但已在[此次提交]中(https://github.com/jhy/jsoup/commit/4f707008353e272c12a7a6543d6ecfc666a7cc64)。 – stipx 2016-12-27 19:45:38