如何使用jQuery选择具有唯一文本内容的XML节点?

我试图从XML文档“jQuery方式”中提取一个唯一的文本条目列表,并且正在进行攻击。

从这个XML:

   Category 1 Category 2     Category 2 Category 3   

我想生成一个选择列表,如:

  Category 1 Category 2 Category 3  

到目前为止,我的所有尝试都产生了重复的“类别2”选项节点。 我试图使用$ .unique()方法,但结果让我觉得它只是比较节点名称,而不是文本内容。 这是我最新的hackery不起作用:

 var filters = $("cat",xmldoc); filters = $.unique(filters); $(filters).each(function() { $("select").append("" + $(this).text() + ""); }); 

我可以想到一些标准的javascript技巧来实现这一点,但我希望有一个漂亮,优雅的jQuery方法来实现这一目标。

任何提示或技巧将不胜感激。

谢谢!

cat元素不是重复的,因为它们具有相同的文本内容。 它们仍然是具有自己的不同身份的元素,因此unique不会删除它们。

您必须将文本内容读入数组,然后从Array-of-String中删除重复项。

不幸的是,你也不能在String-of-String上使用unique ,因为它只支持DOM元素项。

我只是在构建列表时删除了欺骗:

 var cats= []; $('cat', xmldoc).each(function() { var text= $(this).text(); if ($.inArray(text, cats)===-1) cats.push(text); }); 

然后将每个选项添加到选择:

 $.each(cats, function() { $('select').append($(' 

选项文本需要使用attr设置,而不是通过将整个元素作为HTML传递。 当您从文本中创建HTML时,您必须将HTML注释到HTML注入任何文本字符串,否则您将有潜在的跨站点脚本安全漏洞。