jquery hasClass, ¿se le puede dar el comienzo del nombre de la clase para obtener el nombre completo de la clase?
Frecuentes
Visto 1,501 veces
4
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.
3 Respuestas
9
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
3
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
0
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 javascript jquery or haz tu propia pregunta.
¿Y si un elemento tiene dos clases que comienzan con
test-
? ¿Cómo sabrá tu código cuál quieres? - Blazemonger@Blazemonger Eso no será un problema. Un solo elemento no tendrá 2 clases de prueba. - sameold