0

想象一下,我们有一些这样的 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)如何处理验证问题?我是说,

4

2 回答 2

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()
});
于 2012-05-03T08:30:10.417 回答
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是异步的,它是。

于 2012-05-22T04:55:06.443 回答