¿Hay alguna forma en jQuery de hacer un bucle o asignar todas las clases asignadas a los elementos a arrays?
por ejemplo
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
Buscaré las clases «especiales» en la «Dolor spec» de arriba. Sé que puedo usar hasClass (), pero el nombre real de la clase puede no ser conocido en ese momento.
#1 edificio
Por qué nadie simplemente listas.
$(element).attr("class").split(/\s+/);
Editar: como @ mark Amery señala, no se puede simplemente. split(‘) porque los nombres de las clases pueden ser separados por cualquier tipo de espacio.
#2 building
var classList = $(element).attr('class').split(/\s+/);$(classList).each(function(index){ //do something});
#3 building
Este es un plug-in de jQuery-in que devolverá un array de todas las clases que tiene el elemento coincidente
;!(function ($) { $.fn.classes = function (callback) { var classes = ; $.each(this, function (i, v) { var splitClassName = v.className.split(/\s+/); for (var j = 0; j < splitClassName.length; j++) { var className = splitClassName; if (-1 === classes.indexOf(className)) { classes.push(className); } } }); if ('function' === typeof callback) { for (var i in classes) { callback(classes); } } return classes; };})(jQuery);
Úsalo así
$('div').classes();
Por lo que a ti respecta
También puedes pasar funciones a métodos para ser llamados en cada clase
$('div').classes( function(c) { // do something with each class });
Este es el jsFiddle que monté para demostración y pruebas http://jsfiddle.net/GD8Qn/8/
Streamline Javascript
;!function(e){e.fn.classes=function(t){var n=;e.each(this,function(e,t){var r=t.className.split(/\s+/);for(var i in r){var s=r;if(-1===n.indexOf(s)){n.push(s)}}});if("function"===typeof t){for(var r in n){t(n)}}return n}}(jQuery);
#4 building
Puedes usar document.getElementById(‘divId’).className.split(/\s + /); para obtener una matriz de nombres de clase.
Luego, puedes iterar y encontrar la que necesitas.
var classList = document.getElementById('divId').className.split(/\s+/);for (var i = 0; i < classList.length; i++) { if (classList === 'someClass') { //do something }}
jQuery realmente no te ayuda
var classList = $('#divId').attr('class').split(/\s+/);$.each(classList, function(index, item) { if (item === 'someClass') { //do something }});
#5 construyendo
$('div').attr('class').split(' ').map(function(cls){ console.log(cls);})