2013-07-03 26 views
10

Mam funkcję ajax, która pobiera pewne wartości w oparciu o wybraną wartość w menu rozwijanym. Próbuję włączyć/wyłączyć niektóre pola na podstawie podciągu. Znalazłem „zawiera” do pracy w firefox, ale badania w Chrome i Safari mówi mi, że obiekt „nie ma metoda zawiera”jQuery: contains() działa w przeglądarce Firefox, ale nie Chrome/Safari

if ($d.attr("embed").contains('$var_2$')) { 
    //do something 
} else { 
    // do something else 
} 

Czy istnieje alternatywa dla Zawiera że będzie działać we wszystkich przeglądarkach?

Odpowiedz

18

co używasz jest String.contains, nie jQuery.contains. dzieje się tak dlatego, że używasz funkcji zwracającej wartość o wartości .attr, która jest ciągiem, a nie obiektem jQuery.

używać jQuery.contains() (wich działa cross-browser), można to zrobić w zamian:

$d.contains('$var_2$') 

jednak pamiętać, że to nie będzie szukał tylko w określonym atrybucie, ale zamiast całego elementu.

więc co najprawdopodobniej chcą zrobić to za pomocą String.indexOf() (wich działa również cross-browser):

$d.attr("embed").indexOf('$var_2$') != -1 
+0

Dzięki za dokładnym wyjaśnieniem, że działa! Widziałem, jak indexOf zasugerował jako alternatywę i próbował, ale moja składnia musiała być wyłączona, ponieważ nie osiągałem pożądanych rezultatów. Działa idealnie z podaną składnią. Dzięki jeszcze raz. – richj

+0

Nie ma za co. – oezi

+0

Po prostu aktualizacja tej odpowiedzi: twórcy Mozilli postanowili zmienić nazwę tej metody na "zawiera" w Firefoksie 48 dla ES 6 i ze względu na kompatybilność. – beendr

3

Możesz użyć indexOf, powinien działać we wszystkich przeglądarkach.

if ($d.attr("embed").indexOf('$var_2$') > -1) { 
    //do something 
} else { 
    // do something else 
} 
Powiązane problemy