jQuery与XML命名空间的区别以及Opera和Firefox之间的xhr.responseXML

Mag*_*off 5 javascript firefox jquery opera xmlhttprequest

考虑一下:

<!DOCTYPE HTML>
<html><head><title>XML-problem</title>

<script src="jquery-1.3.2.min.js" type="text/javascript"></script>

<script type="text/javascript">

$(function() {
    $('<p/>').load("text.xml", function(responseText, textStatus, xhr) {
        var xml = $(xhr.responseXML);
        var x_txt = xml.find('atom\\:x').text();
        $(this).text(x_txt).appendTo('#container');
    });
});

</script>

</head><body><div id="container" /></body></html>
Run Code Online (Sandbox Code Playgroud)

加载文档时,此脚本应加载text.xml.text.xml看起来像这样:

<xml xmlns:atom="http://www.w3.org/2005/Atom">
    <atom:x>Text</atom:x>
</xml>
Run Code Online (Sandbox Code Playgroud)

加载此文件后,atom:x-node 的文本内容将附加到文档中.我可以在浏览器窗口中看到"文本".

这在Firefox中可以正常工作.但是,除非我将查询更改'atom\\:x'为just,否则它在Opera中不起作用'x'.在这种情况下,它适用于Opera,但不适用于Firefox.

我发现了一种解决方法,即将查询更改为'atom\\:x, x',但我更愿意深入了解这一点.


现在有趣的转折:我可以直接内联xml而不是通过更改从XHR获取它

var xml = $(xhr.responseXML);
Run Code Online (Sandbox Code Playgroud)

var xml = $('<xml xmlns:atom="http://www.w3.org/2005/Atom"><atom:x>Text</atom:x></xml>');
Run Code Online (Sandbox Code Playgroud)

在这种情况下,查询'atom\\:x'将在两个浏览器中提供所需的结果,并且在两个浏览器中都'x'不会产生任何结果.

事实上,这在Opera中的工作方式不同,这让我得出结论,前者的行为是Opera中的一个错误.这是一个合理的结论吗?我在哪里可以指出描述它应该如何工作的标准?


结论:

  1. 这个问题的替代解决办法有哪些?有没有比我找到的更好?
  2. 这是Opera中的一个错误吗?如果是的话,哪个标准是这样说的?

希望你能帮忙:)

Ras*_*Kaj 1

我认为你应该说“atom:x”(不带反斜杠),并确保在主页面的 html 标签上有 xmlns:atom="http://www.w3.org/2005/Atom" 声明html 文件,或者以 javascript 已知的其他方式。