2013-10-22 14 views
6

I seguenti messaggi mostrano uno e due in FF ma solo uno in Safari. Qualcosa in questa riga è incompatibile in Safari? if($('div[data-foo="'+bar+'"').hasClass('baz')){Selettore jQuery per attributo dati che non funziona 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> 

risposta

15

Ti manca una parentesi di chiusura]. Inoltre, bar è una stringa letterale in questo caso, non una variabile. Questo funziona:

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

Oppure si può definire bar come una variabile:

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

(. Non sono sicuro di come è stato altrimenti lavorando in Firefox prima)

+1

Ho riscontrato un problema simile ed è stato a causa della parentesi di chiusura mancante "]". Mac Safari generava un errore mentre i browser basati su Windows potevano identificare il selettore anche con l'errore di sintassi. –

0

seconda cosa si vuole veramente fare dove le dichiarazioni di avviso sono, è possibile effettuare una scelta rapida con:

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

Questo dovrebbe creare una birra rt affermando bar

Problemi correlati