Odpowiedzi:
Sprawdź często zadawane pytania dotyczące jQuery ...
Możesz użyć właściwości length kolekcji jQuery zwróconej przez twój selektor:
if ( $('#myDiv').length ){}
lenght
zamiast length
; to błąd w pisowni.
.length
.
(Ponieważ wydaje mi się, że nie mam wystarczającej reputacji, aby zagłosować za odpowiedzią ...)
Wolf napisał:
Wywołanie właściwości length w obiekcie undefined lub null spowoduje awarię przeglądarek IE i Webkit!
Zamiast tego spróbuj tego:
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") !== null){ // do something }
lub
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") === null){ // don't do something }
Chociaż prawdą jest, że wywołanie właściwości length na niezdefiniowanym lub zerowym obiekcie spowoduje awarię przeglądarek, wynik selektorów jQuery ($ ('...')) nigdy nie będzie pusty ani niezdefiniowany. Dlatego sugestie dotyczące kodu nie mają sensu. Użyj jednej z pozostałych odpowiedzi, mają więcej sensu.
(Aktualizacja 2012) Ponieważ ludzie patrzą na kod, a ta odpowiedź jest dość wysoko na liście: Od kilku lat używam tej małej wtyczki:
jQuery.fn['any'] = function() {
return (this.length > 0);
};
Myślę, że $ ('div'). Any () czyta lepiej niż $ ('div'). Length , a ponadto nie będziesz tak bardzo cierpieć z powodu literówek: $ ('div'). Ayn () zwróci błąd w czasie wykonywania , $ ( 'div'). długość dyskretnie najprawdopodobniej zawsze być falsy.
__
Edycje listopad 2012:
1) Ponieważ ludzie mają tendencję do patrzenia na kod i nie czytania tego, co jest powiedziane wokół kodu, dodałem dwie duże uwagi lektora do zacytowanego kodu Wolfa.
2) Dodałem kod małej wtyczki, której używam w tej sytuacji.
Funkcja wyszukiwania zwraca tablicę pasujących elementów. Możesz sprawdzić, czy długość wynosi zero. Zwróć uwagę na zmianę, aby wyszukać elementy tylko raz i ponownie wykorzystać wyniki w razie potrzeby.
var elem = $("#btext" + i);
if (elem.length != 0) {
elem.text("Branch " + i);
}
Ponadto, czy próbowałeś po prostu użyć funkcji tekstowej - jeśli żaden element nie istnieje, nic nie da.
$("#btext" + i).text("Branch " + i);
Funkcja jquery $ () zawsze zwraca wartość różną od null - średnie elementy dopasowane do ciebie selector cretaria. Jeśli element nie został znaleziony, zwróci pustą tablicę. Twój kod będzie więc wyglądał mniej więcej tak -
if ($("#btext" + i).length){
//alert($("#btext" + i).text());
$("#btext" + i).text("Branch " + i);
}
W jQuery 1.4 otrzymujesz funkcję $ .isEmptyObject, ale jeśli jesteś zmuszony używać starszej wersji jQ, jak my, biedni programiści Drupala, po prostu kradnij ten kod:
// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
for ( var name in obj ) {
return false;
}
return true;
}
Używaj go jak:
console.log(isObjectEmpty(the_object)); // Returns true or false.
if ( $('#whatever')[0] ) {...}
Obiekt jQuery, który jest zwracany przez wszystkie natywne metody jQuery NIE jest tablicą, lecz obiektem z wieloma właściwościami; jeden z nich jest właściwością „długości”. Możesz również sprawdzić size () lub get (0) lub get () - 'get (0)' działa tak samo jak dostęp do pierwszego elementu, czyli $ (elem) [0]
A co z używaniem „undefined”?
if (value != undefined){ // do stuff }
użyj $("#selector").get(0)
do sprawdzenia z null w ten sposób. get zwraca element dom, do tego czasu masz do czynienia z tablicą, w której musisz sprawdzić właściwość length. Osobiście nie lubię sprawdzania długości dla obsługi zerowej, z jakiegoś powodu mnie to dezorientuje :)
Możesz to zrobić za pomocą właściwości length.
jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) {
//do somthing
}