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 .navlink
se hace clic en un nuevo , me gustaría almacenar el seleccionado previamente navlink
para 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-selected
set: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-selected
es 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