Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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 从HTML字符串中删除重复元素_Javascript_Jquery_Html_Regex - Fatal编程技术网

Javascript 从HTML字符串中删除重复元素

Javascript 从HTML字符串中删除重复元素,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,我有这个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'> <inpu

我有这个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'>
.each()
循环运行7次,因为7个字段具有“allDomObjects”类。您可以看到此字符串中有重复的元素

要求:

我想从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:

var map = {};
$(unescape(HtmlString)).each(function() {
    if (map[this.id]) {
        $(this).remove();
    }
    else {
        map[this.id] = true;
    }
});

你不能用正则表达式解析html。它容易出错。如果你没有更好的解决方案,你可以试试这个

<input\s+type=hidden'\s+class='allDomObjects'\s+value='[^']*'\s+id='([^']*)'>(?=.*?<input\s+type=hidden'\s+class='allDomObjects'\s+value='[^']*'\s+id='\1'>)

试试这个。请记住,您需要在所有副本中保留第一个元素,以便从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();
        }
    }
}); 
$(unescape(HtmlString)).filter(“.allDomObjects”).each(function(){
如果($('[id=“'+this.id+'“]')).length>1){
对于(var i=1;i<$('[id=“'+this.id+''“]])。长度,i++){
$('[id=“'+this.id+'“]')[i].remove();
}
}
}); 

到目前为止,您为满足这一需求而编写的代码遇到了什么问题?我不知道如何实现这一点?我们可以使用document.createElement并检查重复的代码,但这太多了,当我们通过2或3行代码实现这一点时,编写额外的代码可能不好。如果我没记错的话,我们可以用“Regx”来做,LOC最多是4行或5行。你能解释一下你最初是如何陷入这种情况的吗?我只想再次检查您是否正在尝试修复问题的正确端。我通过ajax从客户端服务器获取此字符串,但我没有更改此字符串的权限。您有两个ID。id属性值应该是唯一的。您应该在事前解决问题,而不是事后解决问题。请查看此行$('[id=“'+this.id+''“])[i].remove();这将从DOM中删除,而不是从HTML字符串中删除。因此,如果您在id上绑定了任何事件,那么它将只绑定到具有此id的第一个元素,同时从HTML中删除也没有意义将其保留在DOM中?不
<input\s+type=hidden'\s+class='allDomObjects'\s+value='[^']*'\s+id='([^']*)'>(?=.*?<input\s+type=hidden'\s+class='allDomObjects'\s+value='[^']*'\s+id='\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();
        }
    }
});