删除具有相同文本值的重复锚点?

时间:2013-12-26 21:28:28

标签: 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][1].remove()
  }
}

看起来真的很笨重而且需要强调。有更有效的方法吗?

3 个答案:

答案 0 :(得分:1)

可以尝试这样只需要jQuery的东西:

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

DEMO

警告是html必须是100%相同的...空间空间,字母。但这与您目前的代码没有任何不同

答案 1 :(得分:1)

我不能删除这个答案,因为它被认为是正确的 - 但是,正如Jesse在下面的评论中指出的那样,事实并非如此。所以我开发了一个更正确,更简单的解决方案,它仍然比其他答案更简单:

// 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();
  }
} );

JSbin demo


原始接受的答案,为后代。此代码删除页面上具有重复项的所有链接,包括每个链接的第一个实例。

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();
} );

答案 2 :(得分:0)

只需将其添加到您想要的第一个孩子或任何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()
  }
}

确保使用类锚

将其包装在div中