Javascript 识别css选择器字符串与XPath字符串
我正在为html开发一个小的查询模块(js),我想提供一个通用的Javascript 识别css选择器字符串与XPath字符串,javascript,html,css,xpath,Javascript,Html,Css,Xpath,我正在为html开发一个小的查询模块(js),我想提供一个通用的query(selector)函数,支持css选择器和XPath选择器作为字符串参数 不管每种选择是如何完成的,我这里的问题是如何识别给定字符串是xpath还是css选择器。我们可以假设函数是这样的: function query(selector){ selectorKind = identifySelectorKind(selector); // I want to know how to code this parti
query(selector)
函数,支持css选择器和XPath选择器作为字符串参数
不管每种选择是如何完成的,我这里的问题是如何识别给定字符串是xpath还是css选择器。我们可以假设函数是这样的:
function query(selector){
selectorKind = identifySelectorKind(selector); // I want to know how to code this particular function
if(selectorKind==="css") return queryCss(selector);
if(selectorKind==="xPath") return queryXPath(selector); //Assume both functions exists and work
}
我的第一种方法(鉴于我对xPath查询的知识有限)是通过检查第一个字符是否为/
(这里我假设所有相关xPath查询都以/
开头)来识别查询类型
因此,identifySelectorKind
将有点像这样:
function query(selector){
selectorKind = identifySelectorKind(selector); // I want to know how to code this particular function
if(selectorKind==="css") return queryCss(selector);
if(selectorKind==="xPath") return queryXPath(selector); //Assume both functions exists and work
}
功能识别选择器IND(选择器){
if(选择器[0]=“/”)返回“xPath”;
否则返回“css”;
}
注意,我不需要验证css和xpath选择器,我只需要一种明确的方法来区分它们。这样的逻辑是否足够?(换句话说,所有xPath选择器都以
/
开头,没有css选择器以相同的方式开头?),如果没有,是否有更好的方法或我想知道的一些注意事项?如果您绝对确定xPath选择器总是以/
开头,那么是的,这很好。请注意,XPath选择器不必以/
开头,但是如果您的选择器总是从根开始选择,那么就可以了。如果您完全确定XPath选择器总是以/
开头,那么是的,就可以了。请注意,XPath选择器不必以/
开头,但是如果您的选择器总是从根开始选择,那么就可以了。您不必这样做。例如,*
是一个有效的xpath和一个有效的css选择器,但它在每个xpath和css选择器中都匹配一组不同的元素。不一定。例如,*
是一个有效的xpath和一个有效的css选择器,但它在每个xpath和css选择器中都匹配一组不同的元素。嗯,我不是100%确定,我想知道xpath查询不会以/或//开始的情况,考虑到所有查询都是DOM queriesWell,我不是100%确定,我想知道xpath查询不会以/或/开头的情况,考虑到所有的都是DOM查询css*
、xpath*
和/*
之间的区别是什么?css*
和xpath/*
匹配树中的每个元素,xpath*
匹配上下文节点的子元素。如果所有查询都像css中的查询一样工作(没有上下文节点),我的假设是否有效?匹配相同元素的xpath必须以/
开头,是的,与上下文节点无关,可能有一种情况,上下文节点独立的xpath不以/
开头。当它以祖先或自我开头时:。例如,在HTML文档中,祖先或self::node()//body
将匹配body元素,而不管上下文节点是什么。css*
、xpath*
和/*
之间的区别是什么?css*
和xpath/*
匹配树中的每个元素,xpath*
匹配上下文节点的子元素。如果所有查询都像css中的查询一样工作(没有上下文节点),我的假设是否有效?匹配相同元素的xpath必须以/
开头,是的,与上下文节点无关,可能有一种情况,上下文节点独立的xpath不以/
开头。当它以祖先或自我开头时:。例如,在HTML文档中,祖先或self::node()//body
将匹配body元素,而不管上下文节点是什么。