Ustalenie, czy jQuery nie znalazł żadnego elementu

126

Używam selektorów jQuery, zwłaszcza selektora id:

$("#elementId")...

Jak określić, czy jQuery odnalazł element, czy nie? Nawet jeśli element o określonym id nie istnieje, następna instrukcja daje mi:[object Object]

alert($("#idThatDoesnotexist"));
Bardock
źródło

Odpowiedzi:

187

$('#idThatDoesnotexist').lengthjest tym, czego szukasz. (Jeśli nic nie znajdzie, to będzie === 0.) Więc twoja instrukcja warunkowa powinna prawdopodobnie wyglądać następująco:

if ($ ('# id'). length) {/ * kod, jeśli znaleziono * /} else {/ * kod, jeśli nie został znaleziony * /}

Otrzymujesz obiekt zwracany z tego alertu, ponieważ jQuery (prawie) zawsze zwraca „obiekt jQuery”, gdy go używasz, co jest opakowaniem dla elementów znalezionych przez jQuery, które pozwala na tworzenie łańcuchów metod.

futuraprime
źródło
3
Nie potrzebujesz zera, $ ('# id'). Długość wystarczy (zero == false w javascript)
David Hellsing
13
@David, fakt, że go nie potrzebujesz , niekoniecznie oznacza, że ​​jest zbędny, na pierwszy rzut oka IMO czyni to bardziej przejrzystym.
Abir,
1
@Abir: To tylko wyjaśnia to, dopóki nie przyzwyczaisz się do składni bez niej, testując pod kątem prawdziwości, a nie jawnie 0. Sugeruję po prostu przyzwyczaić się do składni bez == 0, zobaczysz ją wszędzie.
Scott Stafford
@ScottStafford, aby uzyskać większy prześwit, możesz również użyć if (!!$('#id').length), które wykonują rzutowanie logiczne.
Daniele Vrut
6
Należy również rozważyć, czy korzyści wynikające z zapisania kilku znaków zrównoważy potencjalne zamieszanie, gdy ktoś niezaznajomiony z niuansami Javascript czyta kod. Moim zdaniem nie jest to najlepsza praktyka, jeśli chodzi o łatwość konserwacji.
Matt Carr
26

Futuraprime ma rację, ale możesz skrócić swoją składnię, wykonując następujące czynności:

if ($("#id").length) {
   //at least one element was found
} else {
   //no elements found
}
John Hartsock
źródło
11
!$.isEmptyObject($.find('#id'))

To zwróci wartość true, jeśli element istnieje, a false, jeśli nie.

Spa
źródło
7
$('#my_selector').length > 0 
$('#my_selector').get(0) !== undefined
$('#my_selector')[0] !== undefined

To podstawa, teraz rób, co chcesz.

Blackjoker
źródło