删除2个类和节点属性的div

时间:2012-05-03 08:16:28

标签: javascript jquery css html

想象一下,我们有像这样的div

<div class="row chapter" node="1">Chapter 1</div>
<div class="row section" node="1">Section 1</div>

Ajax接受必须删除的节点数组。我对此有几个问题

1)我正在使用以下功能

                $.each(result['nodes'], function(column, node)){
                   $(".row."+column).slideUp("slow").remove();
                }

我无法弄清楚如何通过2个类和节点属性删除。怎么做?

2)AFAIK $ .each函数逐个删除。是否可以一次删除所有内容? 3)如何处理验证问题?我的意思是,

2 个答案:

答案 0 :(得分:0)

您可以使用数组收集选择器,加入它们并立即使用remove all。

var toRemove = [];

$.each(result['nodes'], function(index, value){
    toRemove.push('.row.'+index+'[node='+value+']');
}

//$('.row.chapter[node=1], .row.section[node=1]')
$(toRemove.join(',')).slideUp("slow",function(){
    $(this).remove()
});

答案 1 :(得分:0)

由于对象只有键值对,因此为了处理两个类和一个属性,您必须更改JSON的结构。我建议将其更改为[{“class1”:“foo”,“class2”:“bar”,“node”:1}]。使用该格式,这将用于收集节点:

$($.map(result['nodes'], function(o) {
    return "."+o.class1+"."+o.class2+"[node="+o.node+"]";
}).join(","))

正如约瑟夫所说,您的原始代码会过早删除节点,因此您需要将remove()放入参数slideUp()

$($.map(result['nodes'], function(o) {
    return "."+o.class1+"."+o.class2+"[node="+o.node+"]";
}).join(",")).slideUp("slow", function() {
    $(this).remove()
});

示例jsFiddle:http://jsfiddle.net/tSu8z/

请注意,实际上没有“一个接一个”与“一下子”的区别。使用上面的代码,jQuery获得了同时向上滑动节点的顺序,但在内部它将遍历节点。同样,节点很可能都会同时被删除,但jQuery实际上是在迭代它们。同时查看它的唯一要求是slideUp是异步的,它就是。