2013-07-03 15 views
10

Ich habe eine Ajax-Funktion, die einige Werte basierend auf dem ausgewählten Wert in einem Dropdown-Menü erhält. Ich versuche einige Felder basierend auf einem Teilstring zu aktivieren/deaktivieren. Ich fand ‚enthält‘ in Firefox zu arbeiten, aber die Prüfung in Chrome und Safari sagt mir, dass das Objekt ‚hat keine Methode enthält‘jQuery: contains() funktioniert in Firefox, aber nicht in Chrome/Safari

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

Gibt es eine Alternative zu enthält, wird in allen Browsern funktionieren?

Antwort

18

was Sie verwenden ist es String.contains, nicht jQuery.contains. Das liegt daran, dass Sie die Funktion für den Rückgabewert .attr verwenden, der ein String und kein jQuery-Objekt ist.

verwenden jQuery.contains() (Wich funktioniert Cross-Browser), können Sie diese stattdessen tun könnte:

$d.contains('$var_2$') 

aber beachten Sie, dass dies nur in der angegebenen Attributsuche nicht aber das ganze Element statt.

so was Sie wahrscheinlich tun möchte, ist mit String.indexOf() (wich funktioniert auch Cross-Browser):

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

Vielen Dank für die ausführliche Erklärung, dass gearbeitet! Ich hatte indexOf als Alternative vorgeschlagen und es versucht, aber meine Syntax musste aus gewesen sein, weil ich nicht die gewünschten Ergebnisse erhalten hatte. Funktioniert perfekt mit Ihrer gegebenen Syntax. Danke noch einmal. – richj

+0

Gern geschehen. – oezi

+0

Nur ein Update zu dieser Antwort: Mozilla Devs entschied, diese Methode in Firefox 48 zu 'includes' für ES 6 und Kompatibilitätsgründe umzubenennen. – beendr

3

Sie können indexOf verwenden, sollte es in allen Browsern funktionieren.

if ($d.attr("embed").indexOf('$var_2$') > -1) { 
    //do something 
} else { 
    // do something else 
} 
Verwandte Themen