2

jsFiddle:http: //jsfiddle.net/fH3Sc/

使用给定的 HTML(不修改它),如何special-text根据父或相邻 div 的内容/属性删除每个 div 的最后一个实例?

$(".special-text").slice(0, -1).remove();

这将保留special-text页面上 div 的最后一个实例。

我想保留每个special-textdiv 的 LAST UNIQUE 实例。如果将更多 div 添加到小提琴中,理想情况下它应该只显示每个special-textdiv 的 LAST UNIQUE 实例。

目标输出:http: //jsfiddle.net/JdbTx/

4

5 回答 5

3

遍历不同的文本字符串并将相应的元素存储在包含数组的哈希中。然后只需删除每个数组中的非最后一个元素。

var texts = {};
$(".special-text").each(function() {
    var text = $(this).text();
    if(!texts.hasOwnProperty(text)) {
       texts[text] = [];
    }
    texts[text].push(this);
});

$.each(texts, function(text, elements) {
    $(elements).not(":last").remove();
});

jsFiddle演示

或者另一种方式,基于 Jan 的回答,它在一次运行中完成:

var keepers = {};
$.fn.reverse = [].reverse;
$(".special-text").reverse().filter(function() {
    var text = $(this).text(), include = keepers[text] === true;
    keepers[text] = true;
    return include;
}).remove();
于 2013-02-22T03:41:23.053 回答
1

你可以试试

var obj = {};
$('.special-text').each(function(i, v){
    obj[$(v).text()] = true;
});

$.each(obj, function(i, v){
    $('.special-text:contains(' + i + ')').not(':last').remove()
})

演示:小提琴

步骤 1 识别所有唯一special-text值,然后我们遍历列表并删除除最后一个匹配特殊文本的项目之外的所有值。

更新:我会推荐Jan Dvorak 的答案,因为我有一些问题,如评论中所述。

于 2013-02-22T03:33:41.117 回答
1

这里没有特定的 CSS 选择器,但您可以手动执行此操作:

var keepers = {};

$(".special-text").each(function(){
    keepers[$(this).text()]=this
}).each(function(){
  if(keepers[$(this).text()]!=this){
    $(this).remove()
  }
})

小提琴:http: //jsfiddle.net/honnza/fH3Sc/4/

逻辑如下:

1)收集我们想要保留的所有帖子,每个内容最多一个,覆盖旧条目(意味着只有每个帖子的最后一个实例才能保留在列表中)

2)删除所有未留在该列表中的条目

于 2013-02-22T03:38:10.133 回答
0

这两行重现了您在第二小提琴中所拥有的内容。

$(".name:contains('Jessie')").slice(0, 2).next('.special-text').remove();
$(".name:contains('Meowth')").first().next('.special-text').remove();

由于名称并不唯一JessieMeowth因此很难给出简明的答案。

于 2013-02-22T03:30:46.953 回答
-1
$(".post > .name:contains('Jessie')").nextAll(".special-text").remove();

在此处查看演示

于 2013-02-22T03:28:37.447 回答