2011-08-21 9 views
32

Jestem przyzwyczajony do Prototypejs, gdzie $$ ("selektor") zwróci wartość null, jeśli nie znaleziono żadnych elementów. Jest to wygodne, ponieważ mogę wykonywać różne operacje, aby sprawdzić, czy element jest w DOM.Sprawdzanie, czy selektor jQuery nie znajduje żadnych wyników

Jednak w jQuery $ (selektor) powróci [], jeśli żaden element zostanie znaleziony, więc teraz muszę zrobić:

if ($(selector).length > 0) 

To sprawia, że ​​kod nieco trudniejsze do odczytania.

Moje pytanie: Jaki jest najlepszy sposób na zrobienie tego? Czy powinienem rozszerzyć obiekt jQuery o metody takie jak .empty() i .any(), czy też są wbudowane funkcje do tego?

Aktualizacja: Odnosi się to również do innych selektorów w jQuery, który powinien, tak czy inaczej, tylko zwraca jeden wynik (jak rodzic(), lub najbliżej())

+6

Wystarczy tylko zrobić 'if ($ (selektor) .length)', ponieważ wydaje się, że '0' jest falsey ... –

+4

pozbyć się' > 0''' orzecznik. Jest zbędny. – adarshr

Odpowiedz

32
$.fn.exists = function() { 
    return this.length !== 0; 
} 

używany jak:

$("#notAnElement").exists(); 
+3

idk, jeśli jest szybszy lub ma znaczenie, ale możesz użyć '$ .fn.exists = function() {return !! this [0]; } 'too –

14

Korzystanie length jest najlepszym sposobem. Nie powinieneś używać empty() ani size() > 0, ponieważ to właśnie dodaje kolejny wpis do stosu wywołań.

+6

Używanie if ($ (select) .length) działa całkiem dobrze, zapomniałem, że mogę pominąć> 0! – micho

11
if ($(selector)[0]) 

To wystarczy.

+2

+1 Krótki i szybki! – user113716

+0

ty, @patrick :) –