如何删除具有完全相同文本或内容的锚点?
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()
}
}
看起来真的很笨重而且需要强调。有更有效的方法吗?
答案 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();
}
} );
原始接受的答案,为后代。此代码删除页面上具有重复项的所有链接,包括每个链接的第一个实例。
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中