Digamos que tengo 4 elementos div con clase .navlink, que, cuando se hace clic, se usan .data()para establecer una clave llamada 'selected', en un valor de true:
$('.navlink')click(function() { $(this).data('selected', true); })
Cada vez que .navlinkse hace clic en un nuevo , me gustaría almacenar el seleccionado previamente navlinkpara su posterior manipulación. ¿Existe una forma rápida y sencilla de seleccionar un elemento en función de lo que se almacenó usando .data()?
No parece haber ningún jQuery : filtros que se ajusten a la factura, e intenté lo siguiente (dentro del mismo evento de clic), pero por alguna razón no funciona:
var $previous = $('.navlink').filter(
function() { $(this).data("selected") == true }
);
Sé que hay otras formas de lograr esto, pero en este momento solo tengo curiosidad por saber si se puede hacer a través de .data().

$("*").filter(function() { return $(this).data("DATA IDENTIFIER HERE") == DATA VALUE HERE; });Solo para el registro, puede filtrar los datos con jquery (esta pregunta es bastante antigua y jQuery evolucionó desde entonces, por lo que también es correcto escribir esta solución):
o mejor (por rendimiento):
o, si desea obtener todos los elementos con
data-selectedset:Tenga en cuenta que este método solo funcionará con datos que se establecieron a través de atributos html. Si configura o cambia datos con la
.data()llamada, este método ya no funcionará.fuente
.data()método en lugar de undata-atributo. Vea este violín: jsfiddle.net/bryandowning/tySWC - Además, el.find()método busca elementos secundarios del selector anterior. En el ejemplo dado,data-selectedes un atributo de.navlink, no un hijo de.navlink. Además,$('div p')y$('div').find('p')son esencialmente equivalentes. El uso.find()parece que puede ser más lento debido a la llamada de función adicional (aunque no estoy seguro de esto). Por favor, corrígeme si me equivoco en algo de esto (realmente deseo que este método funcione)..data(), dado que jQuery busca a través del DOM, lo publiqué para aquellos (como yo) que llegaron a esta pregunta por otras razones; 2) correcto,.find()busca entre los niños, por lo que está mal en este ejemplo; 3) estás equivocado, no son equivalentes, ya que jQuery busca de derecha a izquierda, consulta jonraasch.com/blog/…$('[data-selected]')me ayudó en algo como$('ul.categories a[data-categories_id]').click(......);Podemos hacer un complemento con bastante facilidad:
Uso (marcando un botón de radio):
fuente
Dos cosas que noté (aunque pueden ser errores de cuando lo escribiste).
$('.navlink').click)return $(this).data("selected")==true)fuente
Parece más trabajo de lo que vale.
1) ¿Por qué no tener una única variable de JavaScript que almacene una referencia al elemento \ jQuery objeto actualmente seleccionado?
2) ¿Por qué no agregar una clase al elemento seleccionado actualmente? Entonces podrías consultar el DOM para la clase ".active" o algo así.
fuente