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。我现在无法解决此问题,但欢迎编辑或替换。我的原始解决方案不正确-请检查更新版本!