Extjs Ext.DomQuery.select Issue如果选择器包含逗号

Extjs Ext.DomQuery.select Issue如果选择器包含逗号,extjs,extjs4,extjs3,extjs4.2,Extjs,Extjs4,Extjs3,Extjs4.2,我试图根据选择器从xml查询节点,如果我的select on中有逗号,domquery将抛出错误 发布于:Ext.DomQuery.select(“root/I[a='abc,d']”,resp.responseXML) 下面是我的示例代码: Ext.onReady(function () { Ext.Ajax.request({ url : 'sample.xml', success : function (resp, e) {

我试图根据选择器从xml查询节点,如果我的select on中有逗号,domquery将抛出错误

发布于:Ext.DomQuery.select(“root/I[a='abc,d']”,resp.responseXML)

下面是我的示例代码:

Ext.onReady(function () {
    Ext.Ajax.request({
        url : 'sample.xml',
        success : function (resp, e) {
            //var a = Ext.DomQuery.select("root/I[a='abc']", resp.responseXML);
            var b = Ext.DomQuery.select("root/I[@a='abc']", resp.responseXML);
            var c = Ext.DomQuery.select("root/I[a='abc'd']", resp.responseXML);
            var d = Ext.DomQuery.select("root/I[a='abc@d']", resp.responseXML);
//All the above are working fine

//Below line is not at all working
            var d = Ext.DomQuery.select("root/I[a='abc,d']", resp.responseXML);
// throwing error as : 'Error parsing selector, parsing failed at "' + path + '"'; at line 1126 in ext-all-debug.js 

        },
        failure : function (resp, e) {
            debugger;
        }
    });
});
我的xml如下所示:

<root>
    <I a="abc"/>
    <I a="abc'd"/>
    <I a="abc@d"/>
    <I a="abc,d"/>
    <I a="abc!d"/>
</root>


我在代码中已经使用了很多地方,这只是一个示例。此选择器(此处为“abc,d”
)始终来自一个变量,并且是动态的。没人知道逗号什么时候来,什么时候不来。如何处理这个问题?这有什么解决办法吗?

这行不通。我试了很多。最后决定在domquery中使用开始,并遍历结果数组以找到精确匹配。请参见以下示例

var d = Ext.DomQuery.select("root/I[a^='abc']", resp.responseXML);
var selectedNode = null;
for(var index = 0; index < d.length; index++){
    if(d[index].getAttribute('a') == 'abc,d'){
        selectedNode = d[index];
    }
}
console.log(selectedNode);
var selectedNode = new Array();
for(var index = 0; index < d.length; index++){
    if(d[index].getAttribute('a') == 'abc,d'){
        selectedNode.push(d[index]);
    }
}
console.log(selectedNode);
var d=Ext.DomQuery.select(“root/I[a^='abc']”,resp.responseXML);
var selectedNode=null;
对于(var指数=0;指数
如果希望数组中存在精确匹配,请使用以下示例

var d = Ext.DomQuery.select("root/I[a^='abc']", resp.responseXML);
var selectedNode = null;
for(var index = 0; index < d.length; index++){
    if(d[index].getAttribute('a') == 'abc,d'){
        selectedNode = d[index];
    }
}
console.log(selectedNode);
var selectedNode = new Array();
for(var index = 0; index < d.length; index++){
    if(d[index].getAttribute('a') == 'abc,d'){
        selectedNode.push(d[index]);
    }
}
console.log(selectedNode);
var selectedNode=new Array();
对于(var指数=0;指数
您使用的是什么版本的ExtJS?我刚刚在4.2中试过,效果很好。顺便说一下,将其同时标记为extjs3和extjs4是没有意义的。这两个版本非常不同,这段代码对于任何版本的ExtJS都没有变化。所以我两个都做了标记。我甚至尝试了extjs4.2.1。它抛出的错误是:“错误解析选择器。解析失败在\”[a=\'abc\”,位于ext-all-debug.js的第行:throw new ext.error(err);(行号6879)