Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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 是否删除具有相同文本值的重复定位?_Javascript_Jquery_Underscore.js - Fatal编程技术网

Javascript 是否删除具有相同文本值的重复定位?

Javascript 是否删除具有相同文本值的重复定位?,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,如何删除具有完全相同文本或内容的锚 links = [] $('a').each(function() { links.append([$(this).text, $(this)]); }); grouped = _.groupBy(links, function(input){return input[0]}); for (var i=0;i<grouped.size;i++){ if (grouped[i].size > 1){ grouped[i][0][

如何删除具有完全相同文本或内容的锚

links = []
$('a').each(function() {
    links.append([$(this).text, $(this)]);
});

grouped = _.groupBy(links, function(input){return input[0]});

for (var i=0;i<grouped.size;i++){
  if (grouped[i].size > 1){
   grouped[i][0][1].remove()
  }
}
links=[]
$('a')。每个(函数(){
links.append([$(this.text,$(this)]);
});
grouped=uu.groupBy(链接,函数(输入){返回输入[0]});
对于(变量i=0;i 1){
已分组[i][0][1]。删除()
}
}

看起来真的很笨重和凌乱,需要强调。有更有效的方法吗?

只需将其添加到第一个子项或任意n个子项,而不是每个子项

links = []
$('.anchor a:first-child').each(function() {
    links.append([$(this).text, $(this)]);
});

grouped = _.groupBy(links, function(input){return input[0]});

for (var i=0;i<grouped.size;i++){
  if (grouped[i].size > 1){
   grouped[i][0][1].remove()
  }
}
links=[]
$('.anchor a:first child')。每个(函数(){
links.append([$(this.text,$(this)]);
});
grouped=uu.groupBy(链接,函数(输入){返回输入[0]});
对于(变量i=0;i 1){
已分组[i][0][1]。删除()
}
}

请确保使用类锚将其包装在div中

可以尝试这样的方法,它只需要jQuery:

var linksHtml=[];
$('a').each(function() {
    var html=$(this).html();
   if( $.inArray( html, linksHtml) >-1){
      $(this).remove()
   }else{
      linksHtml.push(html);
    }
});


警告是html必须是100%相同的…空间对空间,字母对字母。但是,这与您当前拥有的代码没有任何不同,我不能删除这个答案,因为它被认为是正确的-但是,正如杰西在下面的评论中指出的,它不是。因此,我开发了一个正确、更简单的解决方案,它似乎比其他答案更简单:

// A list of all unique HTML strings in links
var strings = [];

$( 'a' ).each( function recordContents(){
  var $candidate = $( this );
  var text       = $candidate.text();

  // If the link's text isn't already in the `strings` array, 
  // it's the first of its kind: add it to the array and move on.
  if( strings.indexOf( text ) === -1 ){
    strings.push( text );
  }
  // If it is, it's a duplicate: remove it.
  else {
    $candidate.remove();
  }
} );


最初被接受的答案,为了子孙后代。此代码删除页面上所有重复的链接,包括每个链接的第一个实例

var $a = $( 'a' );

$a.each( function removeDuplicates(){
    var $candidate = $( this );
    var text = $candidate.text();
    $a.filter( function filterForDuplicates(){
        return $( this ).not( $candidate ).text() === text;
    } ).remove();
} );

如果有两个文本为“foo”的链接,这将删除这两个链接。这可能是也可能不是期望的效果。我在我的手机上看不到你的jsbin链接的来源,但是
过滤器中的选择器链指定了
.not($candidate)
,这意味着作为候选链接使用的迭代链接不会被删除-所有其他具有相同文本的链接都会被删除。请在桌面上检查它。它的行为和我描述的一样。@jessegavin你完全正确。问题是重复项没有从
每个
循环中删除,因此当它们被迭代时,它们的“原始”将被删除。事实上,这个脚本将删除所有重复的链接,只保留完整的unique。我现在无法解决此问题,但欢迎编辑或替换。我的原始解决方案不正确-请检查更新版本!