Jaki jest najlepszy sposób na wykrycie, czy selektor jQuery zwraca pusty obiekt. Jeśli zrobisz:
alert($('#notAnElement'));
dostajesz [Object Object], więc teraz to robię:
alert($('#notAnElement').get(0));
który napisze „niezdefiniowany”, a więc możesz to sprawdzić. Ale wydaje się bardzo źle. Jaki jest inny sposób?
jquery
jquery-selectors
peirix
źródło
źródło
this
jest o wiele bardziej pomocny niżtrue
. Zobacz moją odpowiedź przenoszącąpresence
metodę Railsów .this
do zmiennej, zaleciłbym zmianę instrukcji return na to, co ma CSharp .źródło
Selektor zwraca tablicę obiektów jQuery. Jeśli nie znaleziono pasujących elementów, zwraca pustą tablicę. Możesz sprawdzić
.length
kolekcję zwróconą przez selektor lub sprawdzić, czy pierwszy element tablicy jest „niezdefiniowany”.Możesz użyć dowolnego z poniższych przykładów w instrukcji JEŻELI i wszystkie dają ten sam wynik. Prawda, jeśli selektor znalazł pasujący element, w przeciwnym razie fałsz.
źródło
.length
chyba że kod jest gorący. Jest to z pewnością najbardziej jasne z intencją. Jest również.size()
przestarzałe i jest od lat (od 1.8). Po prostu edytuję twoją odpowiedź i ją usunę, dodaj ją z powrotem z notatką, ale jest tak stara, myślę, że lepiej jej nie ma.Lubię robić coś takiego:
Więc możesz zrobić coś takiego:
http://jsfiddle.net/vhbSG/
źródło
TypeError: firstExistingElement.doSomething is not a function
. Możesz owinąć całe przypisanie / test zmiennej w if () i zrobić coś tylko, jeśli element zostanie znaleziony ....Lubię używać
presence
, zainspirowany Ruby on Rails :Twój przykład to:
Uważam, że jest lepszy od proponowanego,
$.fn.exists
ponieważ nadal można używać operatorów logicznych lubif
, ale prawdziwy wynik jest bardziej użyteczny. Inny przykład:źródło
Moje preferencje i nie mam pojęcia, dlaczego nie ma tego w jQuery:
Używany w ten sposób:
Lub, jak to wygląda w CoffeeScript:
źródło
Jest to w dokumentacji JQuery:
http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/
źródło
Domyślnie możesz to robić cały czas. Próbowałem owinąć funkcję jquery lub metodę jquery.fn.init, aby zrobić to bez błędów, ale możesz to zrobić, wprowadzając prostą zmianę w źródle jquery. Uwzględniono niektóre otaczające linie, które można wyszukać. Polecam wyszukiwanie źródła jquery dla
The jQuery object is actually just the init constructor 'enhanced'
Wreszcie nieskompresowany kod źródłowy jquery można uzyskać tutaj: http://code.jquery.com/
źródło