用jQuery获取元素的类列表
有没有办法在jQuery循环或分配给一个数组的所有类分配给一个元素?
恩。
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
我将在上面的“dolor_spec”中寻找一个“特殊”类。 我知道我可以使用hasClass(),但实际的类名不一定是当时已知的。
你可以使用document.getElementById('divId').className.split(/\s+/);
给你一个类名的数组。
然后你可以迭代并find你想要的。
var classList = document.getElementById('divId').className.split(/\s+/); for (var i = 0; i < classList.length; i++) { if (classList[i] === 'someClass') { //do something } }
jQuery并没有真正帮助你在这里…
var classList = $('#divId').attr('class').split(/\s+/); $.each(classList, function(index, item) { if (item === 'someClass') { //do something } });
为什么没有人简单列出。
$(element).attr("class").split(' ');
这是一个jQuery插件,它将返回匹配元素所有类的数组
;!(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[j]; if (-1 === classes.indexOf(className)) { classes.push(className); } } }); if ('function' === typeof callback) { for (var i in classes) { callback(classes[i]); } } return classes; }; })(jQuery);
像使用它
$('div').classes();
在你的情况下返回
["Lorem", "ipsum", "dolor_spec", "sit", "amet"]
您也可以将函数传递给每个类上要调用的方法
$('div').classes( function(c) { // do something with each class } );
这里是一个jsFiddle我设置演示和testinghttp://jsfiddle.net/GD8Qn/8/
缩小的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[i];if(-1===n.indexOf(s)){n.push(s)}}});if("function"===typeof t){for(var r in n){t(n[r])}}return n}}(jQuery);
在支持的浏览器上,可以使用DOM元素的classList
属性。
$(element)[0].classList
它是一个类似数组的对象,列出了元素所有的类。
如果您需要支持不支持classList
属性的旧浏览器版本,则链接的MDN页面也会包含一个垫片 – 尽pipe在IE 8以下的Internet Explorer版本中垫片也不起作用。
你应该试试这个:
$("selector").prop("classList")
它返回该元素的所有当前类的数组。
var classList = $(element).attr('class').split(/\s+/); $(classList).each(function(index){ //do something });
$('div').attr('class').split(' ').map(function(cls){ console.log(cls);})
用所有给定的答案,你永远不应该忘记用户.trim()(或$ .trim())
因为类被添加和删除,可能会出现类string之间有多个空格。例如'class1 class2 class3'..
这将变成['class1','class2','','','','class3'] ..
当您使用修剪,所有多个空格被删除..
也许这可以帮助你。 我用这个函数来获取childern元素的类..
function getClickClicked(){ var clickedElement=null; var classes = null;<--- this is array ELEMENT.on("click",function(e){//<-- where element can div,p span, or any id also a class clickedElement = $(e.target); classes = clickedElement.attr("class").split(" "); for(var i = 0; i<classes.length;i++){ console.log(classes[i]); } e.preventDefault(); }); }
在你的情况下,你想doler_ipsum类你可以这样做现在calsses[2];
。
尝试这个。 这将从您的文档的所有元素中获取所有类的名称。
$(document).ready(function() { var currentHtml=""; $('*').each(function() { if ($(this).hasClass('') === false) { var class_name = $(this).attr('class'); if (class_name.match(/\s/g)){ var newClasses= class_name.split(' '); for (var i = 0; i <= newClasses.length - 1; i++) { if (currentHtml.indexOf(newClasses[i]) <0) { currentHtml += "."+newClasses[i]+"<br>{<br><br>}<br>" } } } else { if (currentHtml.indexOf(class_name) <0) { currentHtml += "."+class_name+"<br>{<br><br>}<br>" } } } else { console.log("none"); } }); $("#Test").html(currentHtml);
});
这里是工作的例子: https : //jsfiddle.net/raju_sumit/2xu1ujoy/3/
感谢这个 – 我有一个类似的问题,因为我试图以编程方式将对象关联到分层类名称,即使这些名称可能不一定是我的脚本知道的。
在我的脚本中,我想要一个<a>
标签通过给<a>
标签[some_class]
加上toggle
类来打开/closures帮助文本,然后给它的帮助文本[some_class]_toggle
的类。 此代码使用jQuery成功查找相关元素:
$("a.toggle").toggle(function(){toggleHelp($(this), false);}, function(){toggleHelp($(this), true);}); function toggleHelp(obj, mode){ var classList = obj.attr('class').split(/\s+/); $.each( classList, function(index, item){ if (item.indexOf("_toggle") > 0) { var targetClass = "." + item.replace("_toggle", ""); if(mode===false){$(targetClass).removeClass("off");} else{$(targetClass).addClass("off");} } }); }
javascript为dom中的一个节点元素提供了一个classList属性。 简单使用
element.classList
将返回一个forms的对象
DOMTokenList {0: "class1", 1: "class2", 2: "class3", length: 3, item: function, contains: function, add: function, remove: function…}
该对象具有包含,添加,删除,你可以使用的function
我有一个类似的问题,types图像的元素。 我需要检查元素是否属于某个类。 首先我试着用:
$('<img>').hasClass("nameOfMyClass");
但我有一个很好的“这个function不适用于这个元素”。
然后我检查了我的元素在DOM浏览器,我看到了一个非常好的属性,我可以使用:className。 它包含了由空格分隔的元素的所有类的名称。
$('img').className // it contains "class1 class2 class3"
一旦你得到这个,就像往常一样分割string。
在我的情况下,这工作:
var listOfClassesOfMyElement= $('img').className.split(" ");
我假设这将与其他types的元素(除了IMG)。
希望它有帮助。
有点迟了,但是使用extend()函数可以让你在任何元素上调用“hasClass()”,例如:
var hasClass = $('#divId').hasClass('someClass');
(function($) { $.extend({ hasClass: new function(className) { var classAttr = $J(this).attr('class'); if (classAttr != null && classAttr != undefined) { var classList = classAttr.split(/\s+/); for(var ix = 0, len = classList.length;ix < len;ix++) { if (className === classList[ix]) { return true; } } } return false; } }); })(jQuery);
问题是Jquerydevise要做什么。
$('.dolor_spec').each(function(){ //do stuff
为什么没有人给出.find()作为答案?
$('div').find('.dolor_spec').each(function(){ .. });
还有非IE浏览器的classList:
if element.classList.contains("dolor_spec") { //do stuff
在这里你去,只是调整了读取广场的答案返回所有类的数组:
function classList(elem){ var classList = elem.attr('class').split(/\s+/); var classes = new Array(classList.length); $.each( classList, function(index, item){ classes[index] = item; }); return classes; }
将一个jQuery元素传递给该函数,以便示例调用将是:
var myClasses = classList($('#myElement'));
我知道这是一个古老的问题,但仍然是。
<div id="specId" class="Lorem ipsum dolor_spec sit amet">Hello World!</div> var className=".dolor_spec" //dynamic
如果你想操纵元素
$("#specId"+className).addClass('whatever');
如果你想检查元素是否有类
$("#specId"+className).length>0
如果多个类
//if you want to select ONE of the classes var classNames = ['.dolor_spec','.test','.test2'] $("#specId"+classNames).addClass('whatever'); $("#specId"+classNames).length>0 //if you want to select all of the classes var result = {className: ""}; classNames.forEach(function(el){this.className+=el;},result); var searchedElement= $("#specId"+result.className); searchedElement.addClass('whatever'); searchedElement.length>0