Filtrar un conjunto de elementos por datos

Diga si tiene un conjunto de elementos con algunos datos como este:

<li data-filtro="website, web app"><a href="trabajos.php?id=84"><img src="imgs/thumbs/item_tn_84.jpg" /></a></li>
<li data-filtro="website, banners"><a href="trabajos.php?id=131"><img src="imgs/thumbs/item_tn_131.jpg" /></a></li>
<li data-filtro="publicidad"><a href="trabajos.php?id=22"><img src="imgs/thumbs/item_tn_22.jpg" /></a></li>
<li data-filtro="publicidad"><a href="trabajos.php?id=45"><img src="imgs/thumbs/item_tn_54.jpg" /></a></li>

Y para filtrar algunos de ellos por su contenido de datos que coinciden con el valor de una variable llamada 'valor', me gustaría hacer algo como

var $set = $('li').filter(function(index){
    return $(this).data('filtro').indexOf(valor) > -1;
});

Pero de alguna manera no puedo hacer que funcione... ¿tienen dos minutos para abrirme los ojos en esto? ¡Gracias de antemano!

preguntado el 03 de mayo de 12 a las 19:05

¿Qué error(es) obtienes (qué significa que no puede hacer que funcione)? ¿A qué se refiere el valor? -

Dice: TypeError no capturado: no se puede llamar al método 'indexOf' de undefined -

2 Respuestas

Sé que esta es una solución diferente, y tal vez eso no sea lo que está buscando, pero puede usar un selector para eso:

$('li[data-filtro*="' + valor + '"]') //this should return all the elements you want.

contestado el 03 de mayo de 12 a las 20:05

Bueno, por alguna razón, no funciona... Error no detectado: error de sintaxis, expresión no reconocida: ['data-filtro*=website'] - elQueFaltaba

Mala mía, tuve un problema con el " y '. Se corrigió el ejemplo, debería funcionar ahora. - eliminarman

Bueno, eso fue todo. En realidad, filtra todos los elementos que coinciden con el valor. ¡Muchas gracias @Deleteman! - elQueFaltaba

prueba este

$('li').each(function(){

        return $(this).data('filtro').indexOf(valor) > -1;
});

contestado el 03 de mayo de 12 a las 20:05

Gracias @Kanishka. Estaba intentando algo parecido antes... var $set = $('li').filter(function(index){ return $(this).data('filtro').indexOf(valor) > -1; } ); Pero supongo que nunca pasó por cada uno de los elementos.. - elQueFaltaba

Probé tu propuesta, y todavía sale con la excepción indexOf de antes.. - elQueFaltaba

¿Intentaste alertar a $(this).data('filtro') - Kanishka Panamáldeniya

edité mi respuesta, verifique y alerte el valor de valor - Kanishka Panamáldeniya

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.