2009-09-10 14 views
46

jQuery facilita la eliminación de nodos del DOM. Pero, ¿cómo se elimina algo del objeto jQuery?Eliminar elemento del objeto jQuery

+2

¿Qué tipo de cosas intentas eliminar? – acrosman

+0

@acrosman - Nada en particular. Solo quiero aprender más sobre cómo jQuery hace su magia. Hay una buena documentación en el sitio de jQuery con respecto a la API, pero (aparte de ir a través de la fuente) no vi mucha documentación sobre el funcionamiento interno del objeto jQuery. –

Respuesta

51

Si está hablando de eliminar nodos del objeto jQuery, use las funciones filter o not. See here for more.

Cómo usar filter:

var ps = $('p'); 

//Removes all elements from the set of matched elements that do 
//not match the specified function. 
ps = ps.filter(function() { 
    //return true to keep it, false to discard it 
    //the logic is up to you. 
}); 

o

var ps = $('p'); 

//Removes all elements from the set of matched elements that 
//do not match the specified expression(s). 
ps = ps.filter('.selector'); 

Cómo usar not:

var ps = $('p'); 

//Removes elements matching the specified expression 
//from the set of matched elements. 
ps = ps.not('.selector'); 
+0

@ geowa4 - gracias por la respuesta. ¿Sabes si el filtro elimina un nodo del objeto de forma global, o simplemente local para su función? –

+8

Una cosa que me hizo tropezar es que en realidad no eliminará nada de un selector almacenado en la memoria caché a menos que usted reasigne. Entonces necesitas ps = ps.filter (function() {// stuff}); – SimplGy

1
<ul> 
    <li class="1" /> 
    <li class="2" /> 
    <li class="3" /> 
    <li class="4" /> 
    <li class="5" /> 
</ul> 

itera sobre la colección Filtrar objeto jQuery. Para cada uno de los elementos: Devuelva true dentro de filter() para mantener el elemento actual en la colección de objetos jQuery. Devuelva false para eliminar el objeto actual de la colección de objetos jQuery.

$("li").filter(function() 
{ 
    if (this.className == "1" || this.className == "2") return true; 

    return false; 
}); 

En este caso; la función anónima ejecutada por filter() devolverá verdadero para el elemento de la lista que tiene la clase y/o , eliminando a su vez los tres últimos elementos de la lista de la colección de objetos jQuery.


Un ejemplo práctico:

<ul> 
    <li class="1" /> 
    <li class="2" /> 
    <li class="3" /> 
    <li class="4" /> 
    <li class="5" /> 
</ul> 

Este fragmento se suma una clase ("azul") a la lista desordenada. Luego resalta los primeros dos elementos de la lista. A continuación, adjunta un clic-manejador de los primeros dos list-item:

$(function() 
{ 
    $("ul").addClass("blue").find("li").filter(function() 
    {   
     if (this.className == "1" || this.className == "2") return true; 

     return false; 

    }).addClass("highlight").click(function() 
    { 
     alert("I am highlighted!"); 
    }); 
}); 
+0

fyi, eso devolverá falso todo el tiempo. estás haciendo un bucle sobre 'ul's, no sobre los' li's que tienen los nombres de clase. – geowa4

+0

Brain-fart :) Gracias por el aviso. – roosteronacid

8

Como se ha señalado ya, $.filter() es una gran opción para filtrar datos. Tenga en cuenta también que the jQuery object can be handled like an array, y como tal, puede usar métodos de matriz como splice() en él.

var people = $(".people"); 
people.splice(2,1); // Remove 1 item starting from index 2 
+0

@ geowa4: Lee http://www.learningjquery.com/2008/12/peeling-away-the-jquery-wrapper – Sampson

+1

@Jonathan: ¿lo leíste? bc no dice que sea una matriz en absoluto. puede obtener uno, claro, y jQuery puede comportarse como una matriz de alguna manera. pero aún no es una matriz, una distinción importante. de hecho, algunas de las funciones de matriz funcionan en el objeto jQuery, como se señaló en mi primer comentario. – geowa4

+0

@ geowa4: Sí, lo leí. Sé que no es una matriz (técnicamente), así que me disculpo por mi pobre redacción.Lo que quise comunicar fue que puedes tratarlo como una matriz, como mi ejemplo señaló. – Sampson

Cuestiones relacionadas