2011-12-25 7 views
5

ho cercato di utilizzare il metodo data (jQuery 1.7.1) in questo codice:Aggiunta dati personalizzati attributo per un nuovo nodo in Jquery non funziona

var q = '<div class="form-error-marker"></div>'; 
var t = $(q).data('message', message).insertAfter(el); 

e non funziona.

Si noti che questo funziona:

var t = $(q).attr('data-message', message).insertAfter(el); 

Perché la prima variante non funziona?

MODIFICA: insertAfter funziona correttamente e viene aggiunto un nuovo div dopo el (che è l'istanza di un elemento che ottengo dalla funzione getElementById(); per farla breve ho una libreria che estendo).

Quando dico "non funziona" intendo che l'attributo "data-message" non è memorizzato.

+0

+1 Ho lo stesso identico problema. – Bojangles

+1

Che cosa significa "non funziona"? 'El' contiene più di un elemento? – SLaks

+0

SLaks: vedere l'aggiornamento della domanda, per favore. –

risposta

7

Utilizzare data come quello imposta una parte arbitraria di dati per questo nodo; non aggiunge un nuovo attributo data-. Basta aggiungere l'attributo con la funzione attr, e quindi accesso con data

var q = $('<div class="form-error-marker"></div>').attr("data-message", message); 

ora accedere in questo modo:

var message = q.data("message"); 

Ecco un fiddle

+0

"Uso di dati come questo imposta una parte arbitraria di dati per questo nodo" Non capisco questa frase. Cosa significa? Grazie! –

+0

@MartyIX: controlla i documenti per la funzione dati http://api.jquery.com/data/ In pratica, puoi allegare dati arbitrari a qualsiasi elemento dom con dati ("chiave", "valore"). È possibile recuperare questi valori dicendo .data ('chiave'); A partire da jQuery 1.4.3, dicendo .data ('chiave') non solo cercherebbe valori impostati in precedenza con .data ('chiave', 'valore') ma guarderebbe anche negli attributi dei dati html5 –

+0

Questo non è il modo ' data() 'dovrebbe essere usato. Il codice OP funziona. L'errore era altrove o stava cercando di accedere a 'attr ('data-message')' dopo aver impostato i dati, che è anche sbagliato. – Popnoodles

2

Quando si utilizza jQuery.data don cambiare gli attributi degli elementi, invece i tuoi dati salvati in $.cache. Quindi, se si desidera modificare gli attributi degli elementi utilizzare jQuery.attr, quando si desidera salvare alcune informazioni utilizzare jQuery.data

Problemi correlati