使用jQuery $()。find分析具有名称空间的XML

时间:2020-03-06 14:40:39  来源:igfitidea点击:

我正在尝试获取XML文档元素的内容,但是该元素的名称中带有一个冒号。

该行适用于每个元素,但名称中带有冒号的元素除外:

$(this).find("geo:lat").text();

我认为结肠需要逃脱。我该如何解决?

解决方案

使用反斜杠,反斜杠本身应转义,以使JavaScript不会吃掉它:

$(this).find("geo\:lat").text();

那不仅仅是普通的元素名称。那是一个合格的名称,意味着它是一个专门引用命名空间中元素类型的名称。元素类型名称为" lat",名称空间前缀为" geo"。

现在,jQuery不能很好地处理名称空间,有关详细信息,请参见错误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();

编辑:我的错,我的印象是补丁已经着陆。对选择器使用亚当的建议,如果我们也需要命名空间,则使用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();

这样,它就可以在所有浏览器中使用