考虑一下:
<!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>
此脚本应在加载文档后加载 text.xml。text.xml 看起来像这样:
<xml xmlns:atom="http://www.w3.org/2005/Atom">
<atom:x>Text</atom:x>
</xml>
加载此文件后,-node 的文本内容atom:x
将附加到文档中。我可以在浏览器窗口中看到“文本”。
这在 Firefox 中按预期工作。'atom\\:x'
但是,除非我将查询从改为 just ,否则它在 Opera 中不起作用'x'
。在这种情况下,它适用于 Opera,但不适用于 Firefox。
我发现了一种解决方法,即将查询更改为'atom\\:x, x'
,但我更愿意深入了解这一点。
现在有趣的转折:我可以直接内联xml,而不是通过更改从XHR获取它
var xml = $(xhr.responseXML);
进入
var xml = $('<xml xmlns:atom="http://www.w3.org/2005/Atom"><atom:x>Text</atom:x></xml>');
在这种情况下,查询'atom\\:x'
将在两个浏览器中都给出所需的结果,而在两个浏览器中都'x'
不会给出结果。
这在 Opera 中的工作方式不同的事实使我得出结论,前一种行为是 Opera 中的一个错误。这是一个合理的结论吗?我在哪里可以指出描述这应该如何工作的标准?
综上所述:
- 这个问题的替代解决方法是什么?比我找到的那个更好吗?
- 这是Opera中的错误吗?如果是,哪个标准是这样说的?
希望你能帮忙:)