Eliminar divs por 2 clases y atributo de nodo

Imagina que tenemos algunos divs como ese

Chapter 1
Section 1

Ajax acepta una matriz de nodos que deben ser eliminados. Tengo algunas preguntas sobre esto

1) Estoy usando la siguiente función

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

No puedo entender cómo eliminar en 2 clases y atributo de nodo. ¿Como hacer eso?

2) AFAIK $ .cada función se borra una a una. ¿Es posible eliminar todo a la vez? 3) ¿Cómo lidiar con problemas de validación? Quiero decir,

Como un objeto solo tiene pares clave-valor, para manejar dos clases y un atributo, tendrá que cambiar la estructura de su JSON. Sugiero cambiarlo a [{“class1”: “foo”, “class2”: “bar”, “node”: 1}]. Con ese formato, esto funcionará para recolectar los nodos:

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

Como dijo Joseph, su código original eliminará los nodos demasiado pronto, por lo que tendrá que poner el remove() en un parámetro para slideUp() :

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

Muestra jsFiddle: http://jsfiddle.net/tSu8z/

Tenga en cuenta que realmente no hay distinción “uno por uno” vs. “todos a la vez”. Con el código anterior, jQuery obtiene la orden de deslizar todos los nodos de una vez, pero internamente iterará a través de los nodos. Del mismo modo, es probable que todos los nodos aparezcan eliminados simultáneamente, pero jQuery en realidad está iterando a través de ellos. El único requisito para que se vea simultáneo es que slideUp sea ​​asíncrono, que es.

Puede recostackr los selectores usando una matriz, únelos y use eliminar todo de una vez.

 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() });