Javascript jQuery选择器转义冒号“:&引用;在IE中工作,但在其他地方不工作

Javascript jQuery选择器转义冒号“:&引用;在IE中工作,但在其他地方不工作,javascript,jquery,internet-explorer,google-chrome,jquery-selectors,Javascript,Jquery,Internet Explorer,Google Chrome,Jquery Selectors,我有一个XSL对象。我想提取一组选定的节点。另一个人或团队编写了XSL文档和选择这些节点的代码行,但它只在IE中起作用,我正在尝试使其跨浏览器兼容 XSL文件 <!-- snippet of XSL file --> <xsl:variable name="title">aaa</xsl:variable> <xsl:variable name="col1">CSV00001</xsl:variable> <xsl:variab

我有一个XSL对象。我想提取一组选定的节点。另一个人或团队编写了XSL文档和选择这些节点的代码行,但它只在IE中起作用,我正在尝试使其跨浏览器兼容

XSL文件

<!-- snippet of XSL file -->
<xsl:variable name="title">aaa</xsl:variable>

<xsl:variable name="col1">CSV00001</xsl:variable>
<xsl:variable name="col2">CSV00002</xsl:variable>
<xsl:variable name="col3">CSV00003</xsl:variable>
<xsl:variable name="col4">CSV00004</xsl:variable>
<xsl:variable name="col5">CSV00005</xsl:variable>
<xsl:variable name="col6">CSV00006</xsl:variable>
<xsl:variable name="col7">CSV00007</xsl:variable>
<xsl:variable name="col8">CSV00008</xsl:variable>
<xsl:variable name="col9">CSV00009</xsl:variable>
我试图参考这篇文章的想法,但这是CSS。但是我确实尝试用
\\3A
\\3A
3A
3A
3A
来替换
,但这些都不起作用

有什么建议吗

根据要求,这里提供了有关如何创建XSL对象的更多信息

function loadXml(xmlFilePath) {
    var retObj = null ;
    var timeUniq = (new Date()).getTime();

    // check protocol
    var protocol = document.location.protocol;
    if(protocol.toLowerCase().indexOf("http")>=0){
        $.ajax({
            url: xmlFilePath + "?t=" + timeUniq,
            type: 'get',
            dataType: 'xml',
            async: false,
            timeout: 1000
        })
           .done(
               function(xml, status){
                   if( status != 'success' ){
                       return;
                   }
                   retObj = xml;
               })
           .fail(
               function(xhr, textStatus){
                   return;
               });
    }

    return retObj;
}

csvXsl = loadXml("./xsl/OrderListCSV.xsl");
多谢各位

更新

应要求,我加了一把小提琴

更新2

把所有的功劳都归功于评论员尼特

如果链接断开,以下是相关部分:

// Workaround for JQuery bug, primarily using Vanilla JS.

function serializeXmlNode(xmlNode) {
    if (typeof window.XMLSerializer != "undefined") {
        return (new window.XMLSerializer()).serializeToString(xmlNode);
    } else if (typeof xmlNode.xml != "undefined") {
        return xmlNode.xml;
    }
    return "";
}

var tmpStr = serializeXmlNode(csvXsl); // Converts XML/XSL object to String
var tmp = document.createElement('div');

tmp.innerHTML = csvXsl; // Does not work
tmp.innerHTML = tmpStr; // This one works, had to serialize object first

var varNodes = tmp.getElementsByTagName('xsl\:variable'); // Works
var varNodes2 = tmp.getElementsByTagName('xsl:variable'); // Also works

我将执行许多步骤来调试此问题:

  • 检查csvXls变量的内容,例如,您可以尝试查找:
    console.log(csvXsl)
    $(csvXsl).find(“xsl\\:变量”)
    $(“xsl\\:变量”,csvXsl)

  • 如果该变量包含正确的节点,例如
    CSV00009
    ,那么它可能是jQuery中的一个bug,我觉得在这样一个基本选择器中应该排除它

  • 张贴您如何获得更多上下文的
    csvXsl
    ,以便我们可以更好地帮助您


  • 这确实是jQuery中的一个bug

    尝试改用:


    由于没有足够的代表,必须以“回答”进行评论

    该行:

     var inputTag = $("#test\\:1").val()); 
    
    在小提琴中,应该显示什么是有效的:

    实际上,在Chrome/webkit中不起作用

    正确的方法是首先在标记上使用纯JS和getElementsByTagName,不带名称空间(冒号后),如果没有元素,则使用完整标记,如下所示:

    var x = xmlDoc.getElementsByTagName("variable");
    if (!x[0]) x = xmlDoc.getElementsByTagName('xsl:variable');
    

    x将包含您的阵列[跨浏览器]

    您是否应该解释为什么会有任何不同?我更新了我的回复,提供了有关如何调试此问题的更多详细信息。谢谢。是的,我可以在控制台中查看csvXsl对象的内容,看到该对象是正确的,并且与IE中的内容完全相同。我尝试了两种形式的find方法,它返回
    []
    。但是,如果我使用
    $(csvXsl).find(“变量”)
    ,它会查找节点。所以,这可能是jQuery中的一个bug。再一次,我没有看到IE出现这个问题。更正:至少在大多数情况下,它似乎在Firefox中工作。但是,它在Chrome中肯定不起作用。你能创建一个小提琴吗?
    csvXsl
    变量中有什么?当你在其他浏览器中运行代码时会发生什么?您是否在浏览器控制台中报告了特定错误,或者…?
    csvXsl
    是从上述XSL文件创建的XSL对象。不幸的是,我没有在浏览器控制台中报告错误,没有。jQuery对象的长度仅为0,但它并不是设置为null或未定义。非常感谢。我从那个香草JS链接中笑了。请在这里查看JSFIDLE例程-->。不过,我必须序列化XSL对象,然后将其设置为tmp.innerHTML才能使其正常工作。谢谢你的帮助!
     var inputTag = $("#test\\:1").val()); 
    
    var x = xmlDoc.getElementsByTagName("variable");
    if (!x[0]) x = xmlDoc.getElementsByTagName('xsl:variable');