如何根据依赖值删除元素(div)

时间:2013-02-22 03:16:44

标签: jquery

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

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

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

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

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

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

5 个答案:

答案 0 :(得分: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演示

another way,基于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();

答案 1 :(得分: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()
})

演示:Fiddle

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

更新:我会推荐answer from Jan Dvorak,因为我的注意事项中有一些问题。

答案 2 :(得分: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)删除所有未留在该列表中的条目

答案 3 :(得分:0)

这两行重现了你在第二小提琴中所拥有的东西。

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

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

答案 4 :(得分:-1)

$(".post > .name:contains('Jessie')").nextAll(".special-text").remove();

See the demo here

相关问题