2012-04-27 12 views
8

Vorrei verificare se un valore di dati jQuery è stato applicato a un oggetto. Per esempio, il codice altrove può assegnare i dati a un oggetto:Un modo corretto per verificare un particolare valore .data() in un oggetto jQuery?

$myObject.data('hello','world'); 

Altrove, voglio verificare se un valore è stato dato alla proprietà data ciao.

Qual è il modo corretto di gestirlo? .hasData sembrava la scelta più ovvia ma sembra non funzionare come fa hasClass in quanto non sembra che tu possa passare un particolare nome di elemento dati ad esso.

risposta

15

Per ottenere la proprietà (ad esempio di confronto), utilizzare .data con un argomento:

$myObject.data('hello') 

restituisce il valore undefined quando i dati non esiste.

+2

quindi, useresti qualcosa come 'if (typeof $ myObject.data ('hello') ===" undefined "))'? Questo dovrebbe funzionare, ma sembra 'un-jQuery-ish';) –

+0

@DA. Non esiste un metodo "jQuery-ish" per la tua richiesta. Puoi scrivere un plugin, se lo desideri. Tutto ciò che serve è questa informazione: 1. Dopo aver assegnato un valore usando '.data()', l'elemento ** DOM ** riceve una proprietà il cui nome è uguale a '$ .expando'. 2. Questa proprietà, ad esempio "jQuery1710979685063056744", contiene un identificatore. 3. Questo identificativo, ad es. "29" corrisponde a una chiave in '$ .cache', ad es. '$ .cache [29]'. I dati sono memorizzati in '$ .cache [29] .data'. –

8

Verificare se i dati esistono e impostarlo in caso contrario.

if ($myObject.data('hello') === undefined) { 
    // data NOT set 
    $myObject.data('hello','world'); 
} else { 
    // data IS set 
} 
+1

ti sembra di avere parentesi nei posti sbagliati? –

-1

si può anche provare:

$myObject.hasData("hello") 

tornerà vero se ci sono dati, e falso se non c'è nulla. Il collegamento sul sito web jQuery: http://api.jquery.com/jquery.hasdata/

+0

Questo è il modo più corretto per eseguire questo controllo per il sito Web jQuery. "Il vantaggio principale di jQuery.hasData (elemento) è che non crea e associa un oggetto dati con l'elemento se non ne esiste attualmente. Al contrario, jQuery.data (elemento) restituisce sempre un oggetto dati al chiamante, creando uno se nessun oggetto dati esisteva in precedenza. " –

+6

@JamesWilson, è completamente errato. Questo controlla solo se ci sono dati, e non è una proprietà di un oggetto jQuery, ma piuttosto jQuery stesso. – Dykam

+1

Non funziona. Ottengo TypeError: $ (...). HasData non è una funzione. – sohtimsso1970

Problemi correlati