2013-10-22 10 views
6

Die folgenden zeigen Alarm eins und zwei in FF, aber nur eins in Safari. Ist irgendetwas in dieser Zeile in Safari inkompatibel? if($('div[data-foo="'+bar+'"').hasClass('baz')){jQuery Selector nach Datenattribut funktioniert nicht in Safari

jQuery

alert('one'); 
if($('div[data-foo="'+bar+'"').hasClass('baz')){ 
    alert('two'); 
}else{ 
    alert('three'); 
} 

HTML

<div data-foo="bar" class="baz"></div> 

Antwort

15

Sie sind ein Schließbügel fehlt]. Außerdem ist bar in diesem Fall ein String-Literal, keine Variable. Dies funktioniert:

alert('one'); 
if($('div[data-foo="bar"]').hasClass('baz')){ 
    alert('two'); 
}else{ 
    alert('three'); 
} 

Oder Sie können bar als Variable definieren:

var bar = "bar"; 
alert('one'); 
if($('div[data-foo="' + bar + '"]').hasClass('baz')){ 
    alert('two'); 
}else{ 
    alert('three'); 
} 

(. Nicht sicher, wie es sonst in Firefox zu arbeiten, bevor)

+1

Ich stieß auf ein ähnliches Problem und es war wegen der fehlenden schließenden Klammer "]". Mac Safari würde einen Fehler ausgeben, während Windows-basierte Browser den Selektor selbst mit dem Syntaxfehler identifizieren könnten. –

0

Je nachdem, was Sie wirklich wollen Sie, wo die Alarm Aussagen sind, können Sie eine Verknüpfung mit machen:

$('div.baz').each(function(){ 
    alert($(this).data('foo')); 
}); 

Dies sollte ein Bier erstellen rt mit bar