jQuery中是否有一种方法可以循环或将分配给元素的所有类分配给数组?
恩。
Hello World!
我将在上面的" dolor_spec"中寻找"特殊"类。 我知道我可以使用hasClass(),但是实际的类名可能在那时不一定是已知的。
您可以使用
然后,您可以迭代并找到所需的那个。
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(/\s+/);
编辑:正如@MarkAmery指出的那样,您不能仅
这是一个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 http://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元素的
$(element)[0].classList
它是一个类似数组的对象,列出了元素具有的所有类。
如果您需要支持不支持
您应该尝试以下一种方法:
$("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);})
更新:
正如@Ryan Leonard正确指出的那样,我的答案并不能真正解决我自己提出的问题...您需要同时修剪和删除双精度空格(例如,使用string.replace(/ + / g,"") ..或者您可以拆分el.className,然后使用(例如)arr.filter(Boolean)删除空值。
const classes = element.className.split(' ').filter(Boolean);
或更现代
const classes = element.classList;
旧:
有了所有给定的答案,您永远都不要忘记使用.trim()(或$ .trim())用户。
因为添加和删除了类,所以类字符串之间可能存在多个空格。 'class1 class2 class3'..
这将变成['class1','class2','','','','class3']。
使用修剪时,所有多个空格都将被删除。 (短码网-duanma.net)
可能对您有帮助。我已经使用此功能来获取子元素的类。
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类现在可以
尝试这个。这将从文档的所有元素中获取所有类的名称。
$(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]+"{}"
}
}
}
else
{
if (currentHtml.indexOf(class_name) <0) {
currentHtml +="."+class_name+"{}"
}
}
}
else
{
console.log("none");
}
});
$("#Test").html(currentHtml);
});
这是工作示例:https://jsfiddle.net/raju_sumit/2xu1ujoy/3/
谢谢您-我遇到了类似的问题,因为我试图以编程方式将对象与分层的类名称相关联,即使这些名称不一定是我的脚本知道的。
在我的脚本中,我想要一个
$("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");}
}
});
}
对于image类型的元素,我也遇到了类似的问题。 我需要检查元素是否属于某个类。 首先,我尝试了:
$('<img>').hasClass("nameOfMyClass");
但是我得到了一个很好的"此元素不可用此功能"。
然后,我在DOM资源管理器上检查了元素,并看到了可以使用的非常好的属性:className。 它包含我的元素的所有类的名称,用空格分隔。
$('img').className // it contains"class1 class2 class3"
一旦获得此权限,只需照常拆分字符串即可。
就我而言,这可行:
var listOfClassesOfMyElement= $('img').className.split("");
我假设这将与其他类型的元素一起工作(除了img)。
希望能帮助到你。
javascript为dom中的节点元素提供了classList属性。只需使用
element.classList
将返回一个形式的对象
DOMTokenList {0:"class1", 1:"class2", 2:"class3", length: 3, item: function, contains: function, add: function, remove: function…}
该对象具有包含,添加,删除之类的功能,可以使用
问题是Jquery打算做什么。
$('.dolor_spec').each(function(){ //do stuff
为什么没有人给出.find()作为答案?
$('div').find('.dolor_spec').each(function(){
..
});
对于非IE浏览器,还有classList:
if element.classList.contains("dolor_spec") { //do stuff
有点晚了,但是使用extend()函数可以让您在任何元素上调用" hasClass()",例如:
(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);
我知道这是一个古老的问题,但仍然存在。
Hello World!
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
在这里,您只需调整readsquare的答案即可返回所有类的数组:
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'));
以上就是短码网小编为大家整理的《javascript 使用jQuery获取元素的类列表》相关内容,希望大家喜欢。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将联系本站反馈,一经查实,立即处理!
《javascript 使用jQuery获取元素的类列表》文档下载仅供参考学习,下载后请在24小时内删除。
转载注明出处:https://www.duanma.net/article/9bd2874e996.html