2011-09-08 10 views
7

¿existe alguna manera en jQuery para seleccionar elementos que tengan un cierto valor en una matriz de atributos de datos?Cómo seleccionar elementos con jQuery que tienen un cierto valor en una matriz de atributos de datos

Considérese este fragmento de HTML:

<li id="person1" data-city="Boston, New York, San Fransisco"> 
    Person name 1 
</li> 
<li id="person2" data-city="Los Angeles, New York, Washington"> 
    Person name 2 
</li> 

¿Cuál es la mejor manera en jQuery para seleccionar todas las personas con "New York" en la ciudad de datos de atributos?

La solución debe tener en cuenta que ciertos citynames aparecen en otros nombres de ciudades (en el ejemplo 2: Londres, Nueva Londres)

Ejemplo 2:

<li id="person1" data-city="Boston, London, San Fransisco"> 
    Person name 1 
</li> 
<li id="person2" data-city="Los Angeles, Washington, New London"> 
    Person name 2 
</li> 

¿Cuál es la mejor manera en jQuery para seleccionar todas las personas con "Londres" en el atributo de ciudad de datos? Una ciudad con "New London" no debe ser seleccionada.

+0

No se puede tener múltiples elementos con el mismo valor de id. – jfriend00

+0

posible duplicado de [Cómo seleccionar elementos con jQuery que tienen un cierto valor en una matriz de atributos de datos] (http://stackoverflow.com/questions/7344353/how-to-select-elements-with-jquery-hathat-have -a-cierto-valor-en-un-atributo-de-datos) – Paulpro

+0

corregido el html para que todos los elementos tengan un ID único – murze

Respuesta

32

Puede utilizar el selector de tag[attr*=string] donde *= concuerda con la cadena se encuentran en cualquier parte del valor de la etiqueta. He de color rojo el texto, sólo para que pueda probar ...

$("li[data-city*=New York]").css({color:'red'}); 

O a través del método más complejo para satisfacer las necesidades de ejemplo dos:

$("li") 
    .filter(function(){ 
      return $(this).attr('data-city').match(/(^|,\s+)London(,|$)/) 
     }) 
    .css({color:'red'}); 

Este método utiliza el filtro que pasar por la lista de li seleccionado y combinar todos los elementos con el atributo data-city que coincide con la expresión regular (^|,\s+)London(,|$) lo que significa ...

  • inicio o coma (^|,)
  • y uno o más espacios (\s+)
  • seguidos de London
  • seguidos por coma o punto y final (,|$)

que utiliza este código HTML:

<li id="person1" data-city="Boston, New York, San Fransisco, London"> 
    Person name 1 
</li> 
<li id="person2" data-city="Boston, New Jersey, London, San Fransisco"> 
    Person name 2 
</li> 
<li id="person3" data-city="Los Angeles, New York, New London, Washington"> 
    Person name 3 
</li> 
+0

pssiempre debe usar un campo de identificación único, si desea un tipo de cosa en lugar de algo específico, debe usar clase en su lugar –

+0

gracias por la solución pero no resuelve el problema en el ejemplo 2 (he agregado otro ejemplo al pregunta) – murze

+1

vea la respuesta actualizada con la solución que usa el filtro, y la expresión regular –

Cuestiones relacionadas