2011-12-25 8 views
5

He intentado utilizar el método data (jQuery 1.7.1) en este código:Adición de datos personalizados atributo para un nuevo nodo en Jquery no funciona

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

y no funciona.

Tenga en cuenta que esto funciona:

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

¿Por qué la primera variante no funciona?

EDIT: insertAfter funciona correctamente y se añade nueva div después el (que es instancia de un elemento que me sale por getElementById() función; cuento largo que tiene una biblioteca que extiendo).

Cuando digo 'no funciona' me refiero a que no se almacena el atributo 'mensaje de datos'.

+0

+1 Tengo exactamente el mismo problema. – Bojangles

+1

¿Qué significa "no funciona"? ¿'El' contiene más de un elemento? – SLaks

+0

SLaks: ver la actualización de la pregunta, por favor. –

Respuesta

7

El uso de data establece un dato arbitrario para este nodo; no agrega un nuevo atributo data-. Sólo tiene que añadir el atributo con la función attr, y luego acceso con data

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

Ahora acceder a él de esta manera:

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

Aquí hay una fiddle

+0

"Usar datos como ese establece un dato arbitrario para este nodo" No entiendo esta oración. Qué significa eso? ¡Gracias! –

+0

@MartyIX - consulte los documentos para la función de datos http://api.jquery.com/data/ Básicamente, puede adjuntar datos arbitrarios a cualquier elemento dom con datos ('clave', 'valor'). Puede recuperar estos valores diciendo .data ('clave'); A partir de jQuery 1.4.3, decir .data ('clave') no solo buscaría los valores previamente establecidos establecidos con .data ('clave', 'valor') sino que también buscaría en los atributos de datos html5 –

+0

Así no es como ' data() 'debe ser utilizado. El código de OP funciona. El error fue en otro lugar o está intentando acceder a 'attr ('data-message')' después de configurar los datos, lo cual también es incorrecto. – Popnoodles

2

Cuando se utiliza jQuery.data que Don No cambie los atributos del elemento; en su lugar, guarde los datos en $.cache. Por lo tanto, si desea cambiar los atributos del elemento use jQuery.attr, cuando desee guardar información, use jQuery.data

Cuestiones relacionadas