2009-09-10 19 views
46

jQuery semplifica la rimozione dei nodi dal DOM. Ma come si rimuove qualcosa dall'oggetto jQuery?Rimuovi oggetto dall'oggetto jQuery

+2

Che tipo di cose stai cercando di rimuovere? – acrosman

+0

@acrosman - Nulla in particolare. Voglio solo saperne di più su come jQuery fa la sua magia. C'è una buona documentazione sul sito jQuery riguardante l'API, ma (oltre a passare attraverso la fonte) non ho visto molta documentazione sul funzionamento interno dell'oggetto jQuery. –

risposta

51

Se si sta parlando della rimozione dei nodi dall'oggetto jQuery, utilizzare le funzioni filter o . See here for more.

Come utilizzare 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'); 

Come utilizzare not:

var ps = $('p'); 

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

@ geowa4 - grazie per la risposta. Sai se il filtro rimuove un nodo dall'oggetto a livello globale o solo locale alla sua funzione? –

+8

Una cosa che mi ha fatto inciampare è che in realtà non rimuoverà nulla da un selettore memorizzato nella cache a meno che tu non ti riassegni. Quindi hai bisogno di ps = ps.filter (function() {// stuff}); – SimplGy

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

filtro itera sulla raccolta oggetto jQuery. Per ciascuno degli elementi: restituire true all'interno di filter() per mantenere l'elemento corrente nella raccolta di oggetti jQuery. Restituire false per rimuovere l'oggetto corrente dalla raccolta di oggetti jQuery.

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

    return false; 
}); 

In questo caso; la funzione anonima eseguita da filter() restituirà true per l'elemento di elenco che ha la classe e/o , a sua volta rimuovendo gli ultimi tre elementi di elenco dalla raccolta di oggetti jQuery.


Un esempio pratico:

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

Questo frammento aggiunge una classe ("blu") per la lista non ordinata. Quindi evidenzia i primi due elementi dell'elenco. Poi attacca un click-gestore per i primi due della lista-voci:

$(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, restituirà false ogni volta. stai scorrendo su 'ul's, non su' li' che hanno i nomi di classe. – geowa4

+0

Male-scoreggia :) Grazie per l'heads-up. – roosteronacid

8

Come notato già, $.filter() è una grande opzione per il filtraggio dei dati. Notare anche che the jQuery object can be handled like an array e come tale, è possibile utilizzare metodi di array come splice() su di esso.

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

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

+1

@Jonathan: l'hai letto? bc non dice che è un array. puoi ottenerne uno, certo, e jQuery può comportarsi come un array in qualche modo. ma non è ancora un array - una distinzione importante. infatti, alcune delle funzioni dell'array funzionano sull'oggetto jQuery, come indicato nel mio primo commento. – geowa4

+0

@ geowa4: Sì, l'ho letto. So che non è un array (tecnicamente), quindi mi scuso per le mie povere parole.Quello che intendevo comunicare era che puoi trattarlo come un array - come il mio esempio ha sottolineato. – Sampson