2013-05-16 2 views
6

Mam następujący kod przykładowy, tworząc kolekcję obiektów.jQuery usuń obiekt z kolekcji obiektów

Jak mogę usunąć jeden z obiektów? (np. $ TestList będzie wyglądać tak, jakby element "delete me" nigdy nie był tam.) Próbowałem .remove, .splice, .delete itp., ale powiedziano mi, że to nie jest funkcja:

Wykonanie typeof ($ TestList) przywraca obiektu i typeof ($ TestList [0]) również wydaje się ważne.

na pewno nie muszę odtworzyć kolekcję bez jednego elementu?

(function($) { 

jQuery.QuickTest = { 
    $TestList: {}, 
    build: function() 
    { 
     $TestList={}; 
     $TestList[0] = 
     { 
      title: "part 1" 
     }; 

     $TestList[1] = 
     { 
      title: "delete me please" 
     }; 

     $TestList[2] = 
     { 
      title: "part 2" 
     }; 

    } 
} 

jQuery.fn.QuickTest = jQuery.QuickTest.build; 

})(jQuery); 

$(document).ready(function() { 

$().QuickTest(
{ 
}) 
}); 

używamy jQuery 1.3

Dziękujemy!

+0

Czy '$()' nie zaczęło działać od wersji 1.4? Poza tym, czy możesz podzielić się z nami tym, co ten fragment ma zrobić? –

+0

Btw, '$ TestList' jest dorozumiane globalnie, co jest złym pomysłem. –

+0

@Jack: Przed 1.4, '$()' zwrócił obiekt jQuery zawierający element 'document'. – Matt

Odpowiedz

10

Przegląd

Przede wszystkim, jest to bardzo nieoczywiste co Twój kod ma robić, ale tutaj są pewne problemy:

jQuery.QuickTest = { 
    $TestList: {}, 
    build: function() 
    { 
     $TestList={}; 

Ty zdefiniuj jQuery.QuickTest.$TestList, ale wewnątrz build() zadeklarujesz globalny obiekt obiekt $TestList.

Funkcje zadeklarowane pod jQuery.fn mają działać na dopasowanym zestawie elementów (z odniesieniem do this) i zwracać je również; twoja funkcja nie działa.

odpowiedzi

odpowiedzi na niektóre pytania:

  1. .remove() jest funkcją jQuery, który usuwa węzły z DOM i musi być wywołana na obiekcie jQuery.

  2. .splice() odnosi się tylko do Array i chociaż masz dostępu $TestList jakby to było jedno, to wciąż tylko Object.

  3. .delete() nie jest jakaś funkcja wiem ;-)

Możliwe rozwiązanie

Aby usunąć wpis z $TestList można użyć delete w ten sposób:

delete $TestList[1]; 
+0

Bardzo dziękuję! Jest to całkowicie uproszczona wersja mojego kodu z absolutnymi podstawami, więc tak, jest to trochę otwarte, przepraszam za to. Ale twoje wyjaśnienie dało mi wiele do obejrzenia, więc dziękuję bardzo! W dzisiejszych czasach dość trudno jest znaleźć to, co próbujesz zrobić, kiedy nie znasz słów, których chcesz użyć. To był mój sposób na wykonanie obiektu dostępnego dla wszystkich moich innych funkcji bez konieczności przekazywania go wszędzie. i usuwanie jest dokładnie tym, czego potrzebowałem. :-) –

7

użycie delete myObject nie myObject.delete

+0

Przy okazji, to jest po prostu javascript i będzie działać bez jQuery. – Michiel

+0

Nie usunie obiektu całkowicie. Zamiast tego pozostawi to jako 'null'. – Fizzix