JQuery 仅在 Firefox 中无法在 XMLDocument 中找到元素

JQuery can't find element in XMLDocument only in Firefox

我调用了返回下一个原始响应的网络服务

    HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 1516
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Date: Fri, 12 Feb 2016 10:28:58 GMT

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <OperationListResponse xmlns="http://tempuri.org/">
            <OperationListResult xmlns:a="http://schemas.datacontract.org/2004/07/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <a:data>123</a:data>
                <a:operation_id i:nil="true"/>
                <a:status>OK</a:status>
            </OperationListResult>
        </OperationListResponse>
    </s:Body>
</s:Envelope>

当我在 javascript 代码中得到此 XML 时,我尝试使用下一个代码读取元素 "status":

//dataResponse is my javascript valid XMLDocument
x = $(dataResponse).find('status').text();

我得到的不是 "OK",而是“”。这只发生在 Firefox 中。奇怪的是它在 Chrome、Opera、Edge 和 Safari 中运行良好。 在 Firefox 中调试时,观察 dataResponse 对象,我实际上可以看到节点 "status" 的值为 "OK".

关于如何解决这个问题的任何线索?

编辑: 我已经尝试按照 Jai 的建议进行更改,但我从 Firefox 得到了奇怪的结果。如果我观察一个构成 "find" 的变量,我可以看到文本。如果我尝试通过直接键入“$(dados).find('a\:status').text()”来查找,我看不到任何结果。 Firefox 观察面板:

Chrome 观察面板:

正如我在评论中发布的那样,用 \ 来逃避 :

x = $(dataResponse).find('a\:status').text();

尽管如此,它在除 Firefox 之外的其他浏览器中都有效。

Jquery 可能与此无关,除了是错误的工具。对于元素查找,它主要委托给 querySelectorAll. XML Documents have namespaces, and selectors have special handling 命名空间。

但是命名空间 shorthand 要求首先声明从 shorthand 到命名空间 URI 的映射。例如。 XPath 查找通过 Document.evaluate's namespace resolver argument and selectors in stylesheets retrieve them from @namespace declarations

querySelectorAll 不采用支持此类命名空间解析的参数,因此只能指定无命名空间、默认命名空间和任意命名空间选择器。

换句话说,不可能通过querySelectorAlla -> http://schemas.datacontract.org/2004/07/命名空间中的status元素与a|status选择器匹配,事实上,它实际上应该throw an exceptiona:status 只是浏览器不知道的伪元素选择器。

一个更通用的 *|status 选择器应该匹配它,但它也可能通过从其他命名空间中选择状态元素来匹配它。

如果您想在 XML 文档中进行命名空间感知遍历,您可能应该改用 XPath。