【发布时间】:2010-09-12 19:36:06
【问题描述】:
我正在尝试获取 XML 文档元素的内容,但该元素的名称中有一个冒号。
此行适用于所有元素,但名称中带有冒号的元素除外:
$(this).find("geo:lat").text();
我认为冒号需要转义。我该如何解决这个问题?
【问题讨论】:
标签: javascript jquery xml namespaces
我正在尝试获取 XML 文档元素的内容,但该元素的名称中有一个冒号。
此行适用于所有元素,但名称中带有冒号的元素除外:
$(this).find("geo:lat").text();
我认为冒号需要转义。我该如何解决这个问题?
【问题讨论】:
标签: javascript jquery xml namespaces
使用反斜杠,它本身应该被转义,这样 JavaScript 就不会吃掉它:
$(this).find("geo\\:lat").text();
【讨论】:
.find("lat") 而不是.find("geo\\:lat"),它对我有用。
.find 就像 getElementsByTagName 在浏览器(尤其是 Chrome 和 Firefox)之间的行为不同。如果您对直接子代感兴趣,请使用.children,它可以跨浏览器工作。更多信息:wiki.orbeon.com/forms/doc/contributor-guide/…
这不仅仅是一个普通的元素名称。这是一个限定名称,这意味着它是一个专门引用命名空间中元素类型的名称。元素类型名称为“lat”,命名空间前缀为“geo”。
目前,jQuery 不能很好地处理命名空间,详情请参阅bug 155。
现在,作为一种解决方法,您应该能够仅使用本地名称选择这些元素:
$(this).find("lat").text();
如果必须区分具有相同本地名称的元素类型,则可以使用filter():
var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("lat").filter(function() { return this.namespaceURI == NS; }).text();
编辑:我的错误,我的印象是补丁已经登陆。使用 Adam 对选择器的建议,如果您也需要命名空间,请使用 filter():
var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("geo\\:lat").filter(function() { return this.namespaceURI == NS; }).text();
【讨论】:
如果你有 chrome 或 webkit 的 jquery 选择器问题没有选择它尝试
$(this).find('[nodeName=geo:lat]').text();
这种方式适用于所有浏览器
【讨论】:
$(xData.responseXML).find("z\\:row, row").each(function() { // Do stuff });