Combinando un selector de clase y un selector de atributos con jQuery

147

¿Es posible combinar un selector de clase y un selector de atributo con jQuery?

Por ejemplo, dado el siguiente HTML:

<TABLE>
  <TR class="myclass" reference="12345"><TD>Row 1</TD></TR>
  <TR class="otherclass" reference="12345"><TD>Row 2</TD></TR>
  <TR class="myclass" reference="12345"><TD>Row 3</TD></TR>
  <TR class="myclass" reference="54321"><TD>Row 4</TD></TR>
</TABLE>

¿Cuál sería el selector que puedo usar para seleccionar solo las filas 1 y 3?

Yo he tratado:

$(".myclass [reference=12345]") // returns nothing

$(".myclass, [reference=12345]") // returns all 4 rows (yes, I know the comma means 'or')

Estoy seguro de que la respuesta es muy simple y he intentado buscar en los foros y la documentación de jQuery, pero parece que no puedo entenderlo. ¿Alguien puede ayudar?

Jason Child
fuente

Respuestas:

290

Combínalos. Literalmente combínalos ; adjuntarlos juntos sin ningún signo de puntuación.

$('.myclass[reference="12345"]')

Su primer selector busca elementos con el valor de atributo, contenidos en elementos con la clase.
El espacio se interpreta como el selector descendiente .

Su segundo selector, como usted dijo, busca elementos con el valor del atributo, o la clase, o ambos.
La coma se interpreta como el operador de selector múltiple , sea lo que sea que eso signifique (los selectores CSS no tienen una noción de "operadores"; la coma probablemente se conoce con mayor precisión como un delimitador).

BoltClock
fuente
1
¿Puedo combinar id también? Quiero decir así: $ ('. myclass [myid = "6"]')
Rahul Pawar
16

Creo que solo necesitas eliminar el espacio. es decir

$(".myclass[reference=12345]").css('border', '#000 solid 1px');

Hay un violín aquí http://jsfiddle.net/xXEHY/

Nick Pyett
fuente
7

Este código también funciona:

$("input[reference=12345].myclass").css('border', '#000 solid 1px');
Daniel
fuente
1

Esto también funcionará:

$(".myclass[reference='12345']").css('border', '#000 solid 1px');
Ajay Malhotra
fuente