2012-03-27 8 views
18
var playerClass = $(this).parent().attr('class') 

Pregunta sobre seleccionar solo una clase específica de la dom.jQuery coincidencia regex

¿Qué puedo agregar a esta línea para seleccionar solo la clase que tiene una clase de jugador-1, jugador-2, básicamente cualquier cosa con un prefijo de jugador, seguido de un número?

Respuesta

43

yo no podría decir exactamente lo que pedían con su pregunta, así que aquí están cuatro posibilidades. Esperemos que uno de estos coincida con lo que pretendía preguntar o puede modificar ligeramente uno de ellos para que quepa.

Para seleccionar todos los elementos de entrada con una clase de player-xx donde xx es un número, usted puede hacer esto:

var playerClass = $('input[class^="player-"]').filter(function() { 
    return((" " + this.className + " ").match(/\splayer-\d+\s/) != null); 
}); 

El primer selector jQuery obtiene ningún nombre de la clase que comienza con "player-". El filtro elimina cualquier elemento que no sea también "player-nn".

Si sólo está tratando de examinar si un nombre de clase en particular contiene player-nn, entonces usted puede hacer que de esta manera:

if ((" " + $(this).parent().attr('class') + " ").match(/\splayer-\d+\s/) != null) { 
    // the parent has player-nn as a class 
} 

Si lo que desea es obtener la clase correspondiente en la matriz, se puede hacer que con esto:

var matches = (" " + $(this).parent().attr('class') + " ").match(/\s(player-\d+)\s/); 
if (matches) { 
    playerClass = matches[1]; 
} 

Si usted está tratando de conseguir realmente el número después del player-, puede hacer lo que de esta manera:

var matches = (" " + $(this).parent().attr('class') + " ").match(/\splayer-(\d+)\s/); 
if (matches) { 
    playerNum = parseInt(matches[1], 10); 
} 

Nota: Todos estos ejemplos usan un truco (que aprendí de jQuery) que si agrega un espacio al principio y al final del nombre de clase general, entonces puede buscar un nombre de clase dado con una expresión regular al buscar su nombre de clase particular está rodeado en ambos lados por espacios en blanco. Esto asegura que no coincida con una parte de un nombre de clase más largo y que solo coincida con nombres de clase completos. jQuery usa este truco en la implementación de .hasClass().

+0

Tengo una solicitud adicional que puede proporcionar .. ¿Cómo podría proporcionar una solicitud adicional para ver si también coincide con una clase "no ilustrada" aquí está el código que estoy usando actualmente ahora .. var playerClass = $ (this) .parent(). attr ('clase').match (/ \ bplayer- \ S +/g) – Greg

+0

@Greg - si solo quiere agregar 'not-pictured' a la misma expresión regular, puede hacerlo así:' .match (/ \ bplayer- \ S + | no ilustrado/g) '. Si eso no es lo que querías, entonces no entiendo tu nueva pregunta, así que por favor aclara. – jfriend00

+0

Eso está funcionando bien, aunque lo está devolviendo separado por comas ... player-3, no representado ¿Hay alguna forma de obtener "jugador-3 no representado" – Greg

2

Para seleccionar todos input elementos que tienen un nombre de clase que comienza con "player-", podría utilizar esto:

var playerClass = $('input[class^="player-"]'); 

El selector "starts-with" se describe aquí: http://api.jquery.com/attribute-starts-with-selector/

Esto no asegurará que "player-" sea seguido inmediatamente por un dígito.

5

creo que esto es lo que necesita:

var playerClass = $(this).parent().attr('class').match(/player-\d+/); 
Cuestiones relacionadas