我正在使用jQuery来解析通过ajax检索的XML,但是我发现使用实际的XML输入存在问题/错误。
考虑以下示例:
var $line = $(
'<example dir="value">Example Text</example>'
), dir = $line.attr("dir");
console.info("dir: ", dir);
此示例应返回“value”,而不是返回空字符串。尝试使用不同的属性名称上面的代码,它返回正确的值。
'dir'是无效属性吗?或者这是jQuery中的错误?只是想知道...
答案 0 :(得分:1)
$(markup)
解析为HTML而不是XML,为您提供带有tagName HTMLUnknownElement
的{{1}}。 example
是existing HTML attribute,可能只有dir
或rtl
。其他任何内容都会被忽略,这就是DOM property dir
下无法读取自定义属性的原因。
(与您对该名称的期望相反,jQuery的ltr
方法实际上通常表示DOM属性访问和不 HTML属性访问,即使它允许HTML属性名称为用作别名。)
在IE中可能还有其他问题,因为自定义元素不会被放入HTML中。
让浏览器解析XML并不像你想象的那么简单。由attr()
(XMLHttpRequest
)返回的XML文档可以在任何地方使用,因此如果可以,请将XML移动到AJAX响应中。
否则,让XML解析器读取字符串在所有浏览器上都不一样(旧版浏览器根本不能这样做)。在IE上你必须使用ajax()
;在其他浏览器上,您经常会得到new ActiveXObject('Microsoft.XMLDOM')
;如果不这样做,你可以尝试new DOMParser()
。
答案 1 :(得分:1)
dir = $line.get(0).getAttribute("dir")
效果很好。
将在jQuery讨论页面中发布此问题。
答案 2 :(得分:0)
因为我不认为它会被解析,试试这个
var $line = $('<example></example>').attr('dir','value').value('Example Text');