我有这个HTML:
<input type=hidden' class='allDomObjects' value='' id='grid_17_domType'>
<input type=hidden' class='allDomObjects' value='' id='grid_17_domType'>
<input type=hidden' class='allDomObjects' value='' id='tab_5_data'>
<input type=hidden' class='allDomObjects' value='' id='grid_17_domType'>
<input type=hidden' class='allDomObjects' value='' id='grid_17_domType'>
<input type=hidden' class='allDomObjects' value='' id='tab_5_data'>
<input type=hidden' class='allDomObjects' value='grid_1' id='grid_1_domType'>
在此屏幕中,您可以看到类名相同,但它们的ID不同。
我写这个来获取所有字段:
$(unescape(HtmlString)).filter(".allDomObjects").each(function() {
console.log(this.id);
});
这个.each()
循环运行7次,因为7个字段有&#39; allDomObjects&#39;类。您可以看到此字符串中存在重复的元素。
要求:
我想从HTML字符串中删除重复的元素。
输入:
<input type=hidden' class='allDomObjects' value='' id='grid_17_domType'>
<input type=hidden' class='allDomObjects' value='' id='grid_17_domType'>
<input type=hidden' class='allDomObjects' value='' id='tab_5_data'>
<input type=hidden' class='allDomObjects' value='' id='grid_17_domType'>
<input type=hidden' class='allDomObjects' value='' id='grid_17_domType'>
<input type=hidden' class='allDomObjects' value='' id='tab_5_data'>
<input type=hidden' class='allDomObjects' value='grid_1' id='grid_1_domType'>
期望的输出:
<input type=hidden' class='allDomObjects' value='' id='grid_17_domType'>
<input type=hidden' class='allDomObjects' value='' id='tab_5_data'>
<input type=hidden' class='allDomObjects' value='grid_1' id='grid_1_domType'>
答案 0 :(得分:2)
我认为您可以使用一些地图对象来存储ID:
var map = {};
$(unescape(HtmlString)).each(function() {
if (map[this.id]) {
$(this).remove();
}
else {
map[this.id] = true;
}
});
答案 1 :(得分:0)
你不能用容易出错的regex.its来解析html。如果你没有得到更好的解决方案,你可以试试这个。
<input\s+type=hidden'\s+class='allDomObjects'\s+value='[^']*'\s+id='([^']*)'>(?=.*?<input\s+type=hidden'\s+class='allDomObjects'\s+value='[^']*'\s+id='\1'>)
放置标记g
和s
。请参阅empty string
的demo.Replace。
答案 2 :(得分:0)
试试这个。请记住,您需要在所有副本中保留第一个元素,因此从1
开始循环$(unescape(HtmlString)).filter(".allDomObjects").each(function() {
if ( $('[id="'+this.id+'"]').length > 1 ) {
for ( var i = 1; i < $('[id="'+this.id+'"]').length, i++ ) {
$('[id="'+this.id+'"]')[i].remove();
}
}
});