2009-09-10 17 views
46

jQuery ułatwia usunięcie węzłów z DOM. Ale jak usunąć coś z obiektu jQuery?Usuń element z obiektu jQuery

+2

Jakie rzeczy próbujesz usunąć? – acrosman

+0

@acrosman - Nic w szczególności. Chcę tylko dowiedzieć się więcej o tym, jak jQuery robi magię. Na stronie jQuery znajduje się dobra dokumentacja dotycząca API, ale (poza przechodzeniem przez źródło) nie widziałem zbyt wiele dokumentacji na temat wewnętrznych działań obiektu jQuery. –

Odpowiedz

51

Jeśli mówisz o usuwaniu węzłów z obiektu jQuery, użyj funkcji filter lub not. See here for more.

Jak korzystać 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. 
}); 

lub

var ps = $('p'); 

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

Jak korzystać not:

var ps = $('p'); 

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

@ geowa4 - dzięki za odpowiedź. Czy wiesz, czy filtr usuwa węzeł z obiektu globalnie, czy tylko lokalnie do jego funkcji? –

+8

Jedną z rzeczy, które mnie potknęły, jest fakt, że nie usunie ona niczego z buforowanego selektora, chyba że zmienisz przydział. Potrzebujesz więc ps = ps.filter (function() {// stuff}); – SimplGy

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

Filtr iteruje obiektu kolekcji jQuery. Dla każdego elementu: Zwróć true wewnątrz filter(), aby zachować bieżący element w kolekcji obiektów jQuery. Zwróć false, aby usunąć bieżący obiekt z kolekcji obiektów jQuery.

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

    return false; 
}); 

W tym przypadku; anonimowa funkcja wykonana przez filter() zwróci true dla elementu listy, który ma klasę i/lub , z kolei usuwa ostatnie trzy elementy listy z kolekcji obiektów jQuery.


Praktyczny przykład:

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

Ten fragment dodaje klasę ("niebieski") do listy nieuporządkowanej. Następnie podświetla dwa pierwsze elementy listy. Następnie przykłada click-obsługi do dwóch pierwszych lista-elementów:

$(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, która za każdym razem zwróci fałsz. przeplatasz 'ul's, a nie' li's które mają nazwy klas. – geowa4

+0

Brain-fart :) Dzięki za heads-up. – roosteronacid

8

Jak już wspomniano, $.filter() jest świetnym rozwiązaniem do filtrowania danych. Zauważ także, że the jQuery object can be handled like an array, i jako takie, możesz użyć na nim metod tablicy, takich jak splice().

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

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

+1

@ Jonathan: czy to przeczytałeś? bc nie mówi, że to w ogóle tablica. można uzyskać jeden, na pewno, a jQuery może zachowywać się jak tablica na kilka sposobów. ale nadal nie jest to tablica - ważne rozróżnienie. w rzeczywistości kilka funkcji tablicowych działa na obiekcie jQuery, jak zauważono w moim pierwszym komentarzu. – geowa4

+0

@ geowa4: Tak, przeczytałem. Wiem, że to nie jest tablica (technicznie), więc przepraszam za moje słabe sformułowanie.To, co chciałem przekazać, to to, że możesz traktować to jak tablicę - jak wskazał mój przykład. – Sampson