2010-11-16 10 views
6

Me imagino que esto debe ser una tarea bastante trivial, pero el uso de Firefox para Mac, 3.6.12 del siguiente no funciona:jQuery 1.4.4: ¿Cómo encontrar un elemento basado en su valor de atributo de datos?

// assign data attributes 
$('.gallery li').each(function(i) { 
    $(this).data('slide',i+1); 
}); 

// outputting an empty jQuery object 
console.log($('.gallery li[data-slide]')); 

// this does not work either outputting an empty jQuery object 
console.log($("[data-slide]")); 

usando Firebug puedo ver que todos los datos de diapositivas-atributos incluyendo su valor numérico se fijada correctamente a la li s y cierre de sesión:

$('.gallery li').each(function(index) { 
    console.log($(this).data()); 
}); 

salidas como se esperaba:

Object { slide=1} 
Object { slide=2} 
Object { slide=3} 
Object { slide=4} 

Entonces, ¿por DOE s el primer console.log no funciona?

Respuesta

9

data agrega elementos al titular de datos interno de jQuery, no a los atributos data-. Estos se leen en estructura de jQuery data(), pero los valores insertados con jQuery no se devuelven al DOM.

La forma más fácil de imitar este estaría utilizando .filter():

// To replicate $('.gallery li[data-slide]') 
$('.gallery li').filter(function(){ 
    return (undefined !== $(this).data('slide')); 
}); 

También puede hacer esto como un selector personalizado:

$.expr[':'].hasData = function(obj, index, meta, stack) { 
    return (undefined !== $(obj).data(meta[3])); 
}; 

$('.gallery li:hasData(slide)'); // li elements under .gallery with "slide" data set 
$(':hasData(slide)'); // any element with "slide" data set 
+0

ah bien, yo había entendido mal el '. data() 'funciona como un atajo para el atributo de datos en html5. Entonces, para leer/escribir, tendré que hacer '$ (el) .attr ('data-slide', 1)'? – Jannis

+0

+1; A punto de escribir eso ... –

+0

@ Jannis - si no está realmente interesado en 'data()' y solo quiere atributos, use '.attr()' –

Cuestiones relacionadas