Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery$()解析具有名称空间的XML。查找_Javascript_Jquery_Xml_Namespaces - Fatal编程技术网

Javascript 使用jQuery$()解析具有名称空间的XML。查找

Javascript 使用jQuery$()解析具有名称空间的XML。查找,javascript,jquery,xml,namespaces,Javascript,Jquery,Xml,Namespaces,我试图获取XML文档元素的内容,但该元素的名称中有一个冒号 此行适用于每个元素,但名称中有冒号的元素除外: $(this).find("geo:lat").text(); 我想冒号需要逃逸。如何解决这个问题?使用反斜杠,反斜杠本身应该转义,以便JavaScript不会吃掉它: $(this).find("geo\\:lat").text(); 这不仅仅是一个普通的元素名。这是一个限定名称,意味着它是一个名称空间中特定引用元素类型的名称。元素类型名称为“lat”,命名空间前缀为“geo” 目前

我试图获取XML文档元素的内容,但该元素的名称中有一个冒号

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

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

我想冒号需要逃逸。如何解决这个问题?

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

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

这不仅仅是一个普通的元素名。这是一个限定名称,意味着它是一个名称空间中特定引用元素类型的名称。元素类型名称为“lat”,命名空间前缀为“geo”

目前,jQuery无法很好地处理名称空间,请参阅以了解详细信息

现在,作为一种解决方法,您应该能够仅使用本地名称选择这些元素:

$(this).find("lat").text();
如果必须区分具有相同本地名称的元素类型,则可以使用
filter()

编辑:我错了,我觉得补丁已经登陆了。使用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();

通过这种方式,它可以在所有浏览器中运行

@Vaske,我在Chrome上看到了同样的情况,使用了jQuery的最新版本之一。在冒号之后使用节点名称的后半部分对我来说很有用。使用了
.find(“lat”)
而不是
.find(“geo\\\:lat”)
,这对我很有用。@Mike是的,但我有名称空间问题,它包含的返回XML存在一般问题,在这种情况下,chrome将其合并:(这对我在FF中不起作用,但我找到了这个答案:
.find
就像
getElementsByTagName
在不同浏览器(尤其是Chrome和Firefox)中的行为不一样。)。如果您对直接子元素感兴趣,请使用
.children
,它可以跨浏览器工作。更多信息:我在回答相关问题时引用了@MikeGrace的评论:值得注意的是,从jQuery 1.7开始,查找命名空间元素的一些解决方法存在问题。有关更多信息,请参阅这些链接:绝对建议查看ArnisAndy在其评论中提供的第二个链接。它胜过所有其他解决方案。指向steveworkman的链接确实有帮助。这在Chrome和FF中对我有用:
$(扩展数据.responseXML)。查找(“z\\\:行,行”)。每个(函数(){//Do stuff});
$(this).find('[nodeName=geo:lat]').text();