【问题标题】:Child XML tag collision jQuery子 XML 标签冲突 jQuery
【发布时间】:2009-09-09 23:39:35
【问题描述】:

我一直在使用 jQuery .find() 进行 xml 遍历,我发现有时我在树中有一个子标签,它会与树上更远的某个地方的标签发生冲突。比如……

<?xml version="1.0" encoding='UTF-8'?>
<userInfo>
   <firstname>This is a firstname</firstname>
   <lastname>This is a last name</lastname>
   <appSpecific>
      <location></location>
      <nickname>First L</nickname>
      <status></status>
      <color>FFB141</color>
      <lastName>Oops, second name</lastName>
      <firstName>Oops, second name</firstName>
      <gender></gender>
      <timezone></timezone>
      <active>true</active>
      <languages></languages>
      <homepage></homepage>      
   </appSpecific>
</userInfo>

现在,当我这样做时:

var firstname = $(xml).find("firstname").text();    
var lastname = $(xml).find("lastname").text();

输出是两组标签的内容。

有没有过滤掉子标签的好方法(特别是因为我知道要过滤的父标签)?

我尝试了 .filter 和 .children 的组合,但似乎无法正常工作。非常感谢任何帮助。

谢谢, 乔什

【问题讨论】:

    标签: jquery xml


    【解决方案1】:

    有没有过滤掉子标签的好方法(特别是因为我知道要过滤的父标签)?

    使用 CSS 子选择器表示您只需要直接子代而不是所有后代。

    我不确定您的示例中的“xml”是什么。如果它是您从例如获得的 XMLDocument。 AJAX 响应,你会说:

    var firstname = $(xml).find('userInfo>firstname').text();
    

    另一方面,如果它是此类文档中 userInfo 的 XML 元素节点,您会说:

    var firstname = $(xml).find('>firstname').text();
    

    如果它是上述文档的实际字符串文本,则第二种情况似乎有效,但实际上它做错了。使用 $(markup) 会为您提供 HTML 片段,而不是 XML。您的 XML 不是有效的 HTML,只能巧合。

    在 jQuery 中没有内置的方法来创建/解析 XML 文档。参见例如。 http://plugins.jquery.com/project/createXMLDocument 了解您可能会如何去做,尽管浏览器支持并不完美。

    【讨论】:

    • 有没有更“正确”的方法来做到这一点?
    • 我有来自 ajax 响应的 xml。没有发现需要使用 3rd 方插件,除了这种特殊的子冲突情况。不过,感谢您的链接。
    【解决方案2】:

    您可以尝试使用:first 选择器:

    var firstname = $(xml).find("firstname:first").text();    
    var lastname = $(xml).find("lastname:first").text();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2011-02-01
      • 2011-04-30
      • 2013-05-07
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      相关资源
      最近更新 更多