jQuery XML 解析器未获取属性“dir”
我使用 jQuery 来解析通过 ajax 检索的 XML,但是我发现使用实际 XML 输入时存在问题/错误。
考虑以下示例:
var $line = $(
'
), dir = $line.attr("dir ”);
console.info("dir: ", dir);
此示例应返回“value”,而不是返回空字符串。使用不同的属性名称尝试上面的代码,它返回正确的值。
“dir”是无效属性吗?或者这是 jQuery 中的一个错误?只是想知道...
I'm using jQuery to parse XML which is retrieved via ajax, however I have found a problem/bug with using the actual XML input.
Consider the following example:
var $line = $(
'<example dir="value">Example Text</example>'
), dir = $line.attr("dir");
console.info("dir: ", dir);
This example should return 'value' instead it returns an empty string. Tried the above code with a different attribute name and it returns the correct value.
Is 'dir' an invalid attribute? Or is this a bug in jQuery? Just wondering...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
dir = $line.get(0).getAttribute("dir")
工作得很好。将在 jQuery 讨论页面中发布此问题。
dir = $line.get(0).getAttribute("dir")
works just fine.Going to post this issue in the jQuery discussion page.
$(markup)
解析为 HTML,而不是 XML,为您提供一个带有 tagNameexample
的HTMLUnknownElement
。dir
是一个现有的 HTML 属性< /a> 只能具有值rtl
或ltr
。其他任何内容都会被忽略,这就是为什么自定义属性在 DOM 属性dir
。(与您从名称中所期望的相反,jQuery 的
attr()
方法实际上通常表示 DOM 属性访问而不是 HTML 属性访问,即使它允许 HTML 属性名称用作别名。)您可能在 IE 中遇到更多问题,因为它不太像将自定义元素放入 HTML 中。
让浏览器解析 XML 并不像您想象的那么简单。由
XMLHttpRequest
(ajax()
) 返回的 XML 文档在任何地方都适用,因此如果可以的话,请将 XML 移至 AJAX 响应中。否则,让 XML 解析器读取字符串在所有浏览器上都不相同(并且较旧的浏览器根本无法做到这一点)。在 IE 上,您必须使用
new ActiveXObject('Microsoft.XMLDOM')
;在其他浏览器上,您经常会得到一个new DOMParser()
;如果失败,您可以尝试document.implementation.createDocument().loadXML()
。$(markup)
parses as HTML, not XML, giving you anHTMLUnknownElement
with tagNameexample
.dir
is an existing HTML attribute which may only have the valuesrtl
orltr
. Anything else is ignored, which is why the custom attribute isn't readable under the DOM propertydir
.(Contrary to what you might expect from the name, jQuery's
attr()
method actually usually represents DOM property access and not HTML attribute access, even though it allows the HTML attribute names to be used as aliases.)You may have further problems in IE which doesn't much like custom elements being dropped into HTML.
Getting a browser to parse XML isn't quite as simple as you might think. Having an XML document returned by
XMLHttpRequest
(ajax()
) works everywhere, so if you can, move the XML into an AJAX response.Otherwise, getting an XML parser to read a string isn't the same on all browsers (and older browsers can't do it at all). On IE you have to use a
new ActiveXObject('Microsoft.XMLDOM')
; on other browsers you often get anew DOMParser()
; failing that, you can try todocument.implementation.createDocument().loadXML()
.因为我认为它没有被解析,所以尝试这个
because i dont think it gets parsed, try this