2009-12-14 11 views
54

I obecnie to zrobić, aby sprawdzić, czy jeden z dwóch elementów istnieje:Jeśli jeden z dwóch elementów istnieje coś zrobić

if ($(".element1").length > 0 || $(".element2").length > 0) { 
    //do stuff... 
} 

Czy istnieje lepszy sposób przepisać to samo? Mam na myśli, czy jest .length to samo co .length > 0?

+0

Można znaleźć ten [Pytanie] (http://stackoverflow.com/questions/31044/is-there- an-exists-function-for-jquery) odpowiada na twoje pytanie. –

Odpowiedz

25
if ($('#myDiv')[0]) { //do something } 

..works najlepsze!

Znaleziono here.

48
if ($(".element1").is('*') || $(".element2").is('*')) { 
    // code 
} 

EDIT (za komentarzu) Wybierz elementy przez wielu klas w jednej rozmowy:

if ($(".element1, .element2").is('*')) { 
    // code 
} 
+3

Zauważ, że możesz również połączyć dwa selektory w jeden, taki jak: '$ (". Element1, .element2 ")'. – bcat

+5

Czy ".is()" jest takie samo jak ".length> 0"? Jaka jest różnica, jeśli takowa? – 3zzy

+0

Nimbuz, dobry post na temat użycia .is() - http://www.bennadel.com/blog/1725-jQuery-s-is-Method-Checks-For-Any-Matching-Elements.htm – micahwittman

1

See Extremely updated version of this plugin here! Teraz używa funkcji wywołania zwrotnego, dzięki czemu możesz zachować łajdowność, jeśli wybierzesz. Może całkowicie zastąpić if lub mogą nadal być stosowane w if


Można stworzyć bardzo prosty jQuery plug-in do tego, jak takie:

jsFiddle

(function($) { 
    if (!$.exist) { 
     $.extend({ 
      exist: function(elm) { 
       if (typeof elm == null) return false; 
       if (typeof elm != "object") elm = $(elm); 
       return elm.length ? true : false; 
      } 
     }); 
     $.fn.extend({ 
      exist: function() { 
       return $.exist($(this)); 
      } 
     }); 
    } 
})(jQuery); 

WYKORZYSTANIE

// With ID 
$.exist("#eleID"); 
// OR 
$("#eleID").exist(); 

// With class name 
$.exist(".class-name"); 
// OR 
$(".class-name").exist(); 

// With just tag // prolly not best idea aS there will be other tags on site 
$.exist("div"); 
// OR 
$("div").exist(); 

Z wyciągu If

if ($(".element1").exist() || $(".element2").exist()) { 
    ...stuff... 
} 

Oczywiście ta wtyczka może być dodatkowo rozszerzony o wiele bardziej wyszukane (obsługi wielu połączeń na raz, tworzenie nieistniejących elementów na podstawie wózek), ale w obecnej chwili wykonuje bardzo prostą, bardzo potrzebną funkcję ... Czy ten element istnieje? powrót True lub False

jsFiddle

2
!$.isEmptyObject($.find('#urId')) 

to wróci "true", jeśli element istnieje i false jeśli nie

okrzyki :)

1

Wystarczy użyć .each().

$(".element1").each(function(){ 
    //Do Something here 
} 

Proste ...

1
$.fn.exists = function(ifExists) { 
    return this.length ? ifExists.call(this, this) : this; 
}; 

Wykorzystanie:

$('.element1, .element2').exists(function(els) { 
    // this and els refers to $('.element1, .element2') 
});