2010-08-26 40 views
0

我正在使用jQuery解析通过ajax检索到的XML,但是我发现使用实际的XML输入存在问题/错误。jQuery XML解析器没有获取属性'dir'

考虑下面的例子:

var $line = $('<example dir="value">Example Text</example>'),DIR = $ line.attr( “DIR”);
console.info(“dir:”,dir);

这个例子应该返回“值”而是返回一个空字符串。使用不同的属性名称尝试上述代码,并返回正确的值。

'dir'是一个无效的属性?或者这是jQuery中的错误?只是想知道...

+0

其实你的确切代码适合我。 – adamse 2010-08-26 10:35:11

+0

也许是不同的jQuery版本?我使用1.4.2 – vitorhsb 2010-08-26 10:45:35

回答

1

dir = $line.get(0).getAttribute("dir")工作得很好。

将在jQuery讨论页面发布此问题。

0

,因为我不认为它被解析,试试这个

var $line = $('<example></example>').attr('dir','value').value('Example Text'); 
+0

尝试上述具有微小差别: '变量$线= $( ' ').attr(' DIR', '值')VAL( '实施例文本');' 但结果是一样的。我知道我给的例子中被解析,因为改变到: '变量$线= $(“<示例方向=‘值’>实施例文本”)' 会工作。 但是我不能改变ajax检索的XML,所以必须坚持'dir'属性。 – vitorhsb 2010-08-26 10:41:44

1

$(markup)解析为HTML,XML不,给你的tagName exampleHTMLUnknownElementdirexisting HTML attribute,它可能只有值rtlltr。其他任何内容都会被忽略,这就是为什么自定义属性在DOM property dir下不可读的原因。

(相反,你可能会从名称的期望,jQuery的attr()方法实际上通常代表DOM属性访问和 HTML属性的权限,尽管它允许HTML属性作为别名名称。)

您可能在IE中遇到更多问题,这与自定义元素被放入HTML中不太相像。

获取浏览器解析XML并不像你想象的那么简单。由XMLHttpRequestajax())返回的XML文档无处不在,所以如果可以,请将XML移动到AJAX响应中。

否则,得到一个XML解析器读取一个字符串是不一样的所有的浏览器(和老的浏览器不能做到这一点的话)。在IE上,你必须使用new ActiveXObject('Microsoft.XMLDOM');在其他浏览器上,你经常会得到一个new DOMParser();否则,你可以尝试document.implementation.createDocument().loadXML()