Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 识别css选择器字符串与XPath字符串_Javascript_Html_Css_Xpath - Fatal编程技术网

Javascript 识别css选择器字符串与XPath字符串

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

我正在为html开发一个小的查询模块(js),我想提供一个通用的
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元素,而不管上下文节点是什么。