¿Hay alguna manera en jQuery para recorrer o asignar a una matriz todas las clases que están asignadas a un elemento?
ex.
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
Buscaré una clase "especial" como en "dolor_spec" arriba. Sé que podría usar hasClass () pero el nombre de la clase real no necesariamente se conoce en ese momento.
javascript
jquery
html
Buggabill
fuente
fuente
Respuestas:
Puede usarlo
document.getElementById('divId').className.split(/\s+/);
para obtener una matriz de nombres de clase.Luego puedes iterar y encontrar el que deseas.
jQuery realmente no te ayuda aquí ...
fuente
$.fn.classList = function() {return this[0].className.split(/\s+/);};
if ($.inArray("someclass",classList)>=0) { /* hasClass someclass*/ }
¿Por qué nadie tiene simplemente una lista?
EDITAR: Como señala @MarkAmery, no puede simplemente
.split(' ')
porque los nombres de clase pueden estar separados por cualquier tipo de espacio en blanco.fuente
$('<div class="foo bar baz">').attr("class").split(' ')
en la consola de su navegador (hay un carácter de tabulación allí); obtendrá en["foo", "bar baz"]
lugar de la lista de clases correcta de["foo", "bar", "baz"]
.class="foo <lots of spaces here> bar"
, terminaría con una matriz con elementos de cadena vacíos.En los navegadores compatibles, puede usar la
classList
propiedad de elementos DOM .Es un objeto tipo matriz que enumera todas las clases que tiene el elemento.
Si necesita admitir versiones antiguas del navegador que no admitan la
classList
propiedad, la página MDN vinculada también incluye una cuña, aunque incluso la cuña no funcionará en las versiones de Internet Explorer por debajo de IE 8.fuente
.classList
no es una matriz verdadera, y métodos como.indexOf(⋯)
no funcionan en ella. Es solo un "objeto tipo matriz", mientras que.className.split(/\s+/).indexOf(⋯)
(de la respuesta aceptada) funciona.Array
uso[...iterable]
oArray.from(iterable)
Aquí hay un complemento jQuery que devolverá una matriz de todas las clases que los elementos coincidentes tienen
Úselo como
En tu caso vuelve
También puede pasar una función al método que se llamará en cada clase
Aquí hay un jsFiddle que configuré para demostrar y probar http://jsfiddle.net/GD8Qn/8/
Javascript Minificado
fuente
Deberías probar este:
Devuelve una matriz de todas las clases actuales del elemento.
fuente
.classList
es la solución: solo debe prestar atención a las inconsistencias y / o la falta de soporte del navegador ....classList
, funciona bastante bien en los navegadores modernosclassList
propiedad no funciona en IE 10/11 para elementos SVG (aunque funciona para elementos HTML). Ver developer.mozilla.org/en-US/docs/Web/API/Element/classListfuente
Actualizar:
Como @Ryan Leonard señaló correctamente, mi respuesta realmente no soluciona el punto que hice yo mismo ... Necesita recortar y eliminar espacios dobles con (por ejemplo) string.replace (/ + / g, "") .. O puede dividir el.className y luego eliminar valores vacíos con (por ejemplo) arr.filter (booleano).
o más moderno
Antiguo:
Con todas las respuestas dadas, nunca debe olvidarse del usuario .trim () (o $ .trim ())
Debido a que las clases se agregan y eliminan, puede suceder que haya múltiples espacios entre la cadena de clase ... por ejemplo, 'clase1 clase2 clase3'
Esto se convertiría en ['class1', 'class2', '', '', '', 'class3'] ..
Cuando usa trim, todos los espacios múltiples se eliminan.
fuente
.classList
es un enfoque mucho más limpio!fuente
.map
; utilícelo.each
si no necesita.map
el valor de retorno. La división en espacios en lugar de cualquier espacio en blanco también está rota: vea mi comentario en stackoverflow.com/a/10159062/1709587 . Incluso si ninguno de estos puntos fuera cierto, esto no agrega nada nuevo a la página. -1!¿Podría esto también ayudarte? He usado esta función para obtener clases del elemento childern.
En su caso, desea la clase doler_ipsum que puede hacer así ahora
calsses[2];
.fuente
Gracias por esto: estaba teniendo un problema similar, ya que estoy tratando de relacionar programáticamente los objetos con los nombres de clase jerárquicos, aunque esos nombres no sean necesariamente conocidos por mi script.
En mi secuencia de comandos, quiero una
<a>
etiqueta para activar / desactivar el texto de ayuda dando la<a>
etiqueta[some_class]
más la clase detoggle
, y luego dando su clase de texto de ayuda[some_class]_toggle
. Este código está encontrando con éxito los elementos relacionados usando jQuery:fuente
Prueba esto. Esto le dará los nombres de todas las clases de todos los elementos del documento.
});
Aquí está el ejemplo de trabajo: https://jsfiddle.net/raju_sumit/2xu1ujoy/3/
fuente
Tuve un problema similar, para un elemento de tipo de imagen. Necesitaba verificar si el elemento era de cierta clase. Primero probé con:
pero obtuve un buen "esta función no está disponible para este elemento".
Luego inspeccioné mi elemento en el explorador DOM y vi un atributo muy bueno que podía usar: className. Contenía los nombres de todas las clases de mi elemento separadas por espacios en blanco.
Una vez que obtenga esto, simplemente divida la cadena como de costumbre.
En mi caso esto funcionó:
Supongo que esto funcionaría con otros tipos de elementos (además de img).
Espero eso ayude.
fuente
javascript proporciona un atributo classList para un elemento de nodo en dom. Simplemente usando
devolverá un objeto de forma
El objeto tiene funciones como contiene, agrega, elimina, que puedes usar
fuente
Un poco tarde, pero el uso de la función extend () le permite llamar a "hasClass ()" en cualquier elemento, por ejemplo:
var hasClass = $('#divId').hasClass('someClass');
fuente
La pregunta es para qué está diseñado Jquery.
¿Y por qué nadie ha dado .find () como respuesta?
También hay classList para navegadores que no son IE:
fuente
Aquí tienes, solo modificó la respuesta de readsquare para devolver una matriz de todas las clases:
Pase un elemento jQuery a la función, para que una llamada de muestra sea:
fuente
$(elem).attr('class').split(/\s+/)
hace. Tal vez me estoy equivocando, pero no veo ninguna razón para recorrer una colección, copiar el contenido a una nueva colección y devolver esa nueva colección.Sé que esta es una vieja pregunta, pero aún así.
Si quieres manipular un elemento
Si quieres comprobar si el elemento tiene clase
si varias clases
fuente