jquery hasClass, ¿se le puede dar el comienzo del nombre de la clase para obtener el nombre completo de la clase?

Estoy tratando de hacer algo similar a esta pregunta, pero es un poco diferente, por lo que la solución no funciona para mí.

<span class="a-class another-class test-top-left"></span>

Tengo un elemento (este código muestra un span pero podría ser div span o algo). Este elemento tiene una clase que comienza con test- (test-top-left, test-top-right etc.) Desencadené un evento de clic en clases que comienzan con test- y guardó el objeto seleccionado como var object = this;. Cosas simples hasta ahora.

Lo que intento hacer ahora es obtener el nombre completo de esa clase (test-top-left). Sé que comienza con test- pero cual es el nombre completo. Lo que pasa es que hay otras clases a-class another-class y test-top-left. Poder hasClass ser utilizado para obtener el nombre completo de la clase? prefiero no usar find() or filter() solo porque puede haber elementos adicionales dentro que también tienen class="test-"

Edit:

El código que tengo ahora es, pero me da TODAS las clases. Lo que necesito es la clase única que comienza con test-.

var object = this;
$(object).attr('class'); 

Así que ahora recorro todas las clases y pruebo cada una por separado, lo que parece mucho código innecesario. Espero que jQuery tenga una forma inteligente de obtener la clase exacta en la que se hizo clic de inmediato.

preguntado el 22 de mayo de 12 a las 20:05

¿Y si un elemento tiene dos clases que comienzan con test-? ¿Cómo sabrá tu código cuál quieres? -

@Blazemonger Eso no será un problema. Un solo elemento no tendrá 2 clases de prueba. -

3 Respuestas

Descripción

Puedes usar jQuerys Attribute Contains Selector, .attr() y .click() método.

El atributo contiene selector - Selecciona elementos que tienen el atributo especificado con un valor que contiene una subcadena determinada.

.attr () - Obtener el valor de un atributo para el primer elemento del conjunto de elementos coincidentes.

.hacer clic() - Vincule un controlador de eventos al evento de JavaScript "clic" o active ese evento en un elemento.

Muestra

html

<span class="anyclass test-hello">Hello World</span>​

jQuery

$("[class*='test']").click(function() {
    var object = $(this);
    alert(object.attr("class").match(/(test-.*?)(?:\s+|$)/)[1])
;});

Echa un vistazo a la actualización jsviolín

Noticias

Si no desea utilizar expresiones regulares, puede hacerlo.

$("[class*='test']").click(function() {
    var object = $(this);
    alert("test-" + object.attr("class").split("test-")[1].split("-"))
;});

Más Información

Respondido el 20 de junio de 20 a las 10:06

Gracias por la actualización. entonces supongo hasClass no se puede usar aquí? Lo que estaba buscando es algo como object.hasClass() pero dé a hasClass solo una parte del nombre de la clase. - mismo viejo

Sí, no puedes usar hasClass para esto. ¿Cuál es el problema con mi respuesta? Esto debería hacer hasClass con comienza con. - loco

Esto debería funcionar para ti:

var object = this;
var className = object.className.match(/(test-.*?)(?:\s+|$)/)[1];

Class name es el nombre de la clase que está buscando.

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

Si no quiere usar split o regex, puede intentar tener la clase en un atributo separado

<span class="someclass test-something" _rel="test-something">test<span> 

or

<span class="someclass" _rel="test-something">test<span>

con el guion

$("[_rel*='test-']").click(....

Y para recuperar el atributo, use $(this).attr("_rel")

contestado el 23 de mayo de 12 a las 09:05

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