0

我正在使用 jQuery 解析通过 ajax 检索的 XML,但是我发现使用实际 XML 输入存在问题/错误。

考虑以下示例:

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

此示例应返回“值”,而不是返回一个空字符串。用不同的属性名称尝试了上面的代码,它返回了正确的值。

'dir' 是无效属性吗?或者这是 jQuery 中的错误?就是想...

4

3 回答 3

1

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

(与您对名称的期望相反,jQuery 的attr()方法实际上通常表示 DOM 属性访问而不是HTML 属性访问,即使它允许将 HTML 属性名称用作别名。)

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

让浏览器解析 XML 并不像您想象的那么简单。XMLHttpRequest让( )返回的 XML 文档在ajax()任何地方都有效,因此如果可以,请将 XML 移动到 AJAX 响应中。

否则,让 XML 解析器读取字符串在所有浏览器上并不相同(旧版浏览器根本无法做到这一点)。在 IE 上你必须使用new ActiveXObject('Microsoft.XMLDOM'); 在其他浏览器上,您经常会得到一个new DOMParser(); 如果做不到这一点,您可以尝试document.implementation.createDocument().loadXML().

于 2010-08-26T10:36:38.943 回答
1

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

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

于 2010-08-26T11:35:45.773 回答
0

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

var $line = $('<example></example>').attr('dir','value').value('Example Text');
于 2010-08-26T10:33:06.917 回答