如何使用jQuery制作页面中所有类的列表?

时间:2013-08-07 08:36:20

标签: jquery css class

我得到了一个电子商店之后,其他人并没有真正关心网站性能,并制作了一个非常反性能的CSS,因为没有CSS minifyer在如此巨大的CSS文件(甚至不是eshop自己的)上正常工作crossbrowser我决定自己清除CSS,为此我需要在页面上使用完整的类列表 - 如何在jQuery中获取页面上使用的完整类列表?

(Somtehing我可以例如循环写入控制台,...而我正在寻找一个如何在jQuery中完成解决方案(在这些事情中我从不相信第三方x))

8 个答案:

答案 0 :(得分:3)

jQuery有一个属性选择器 - 只选择具有类属性的元素:) 然后拆分类属性字符串(对于像 class =“one two”这样的情况)并将它们添加到数组中(别忘了检查类是否为空或者是否已经在数组中。使用 this.valueOf()检查并保存字符串:)

var classes = [];
$('[class]').each(function(){
    $($(this).attr('class').split(' ')).each(function() { 
        if (this.length>0 && $.inArray(this.valueOf(), classes) === -1) {
            classes.push(this.valueOf());
        }    
    });
});
console.log("LIST START\n\n"+classes.join('\n')+"\n\nLIST END");

JSFiddle链接:http://jsfiddle.net/MWJKL/

答案 1 :(得分:3)

仅检查具有class属性的元素并拆分值,这样就不会出现重复

var classes = [];
$('[class]').each(function(){
    $.each($(this).attr('class').split(' '),function(i,className) { 
        if (className.length && $.inArray(className, classes) === -1) {
            classes.push(className);
        }    
    });
});
console.log(classes.join(','));

修改 修复了迭代数组而不是jQuery对象

答案 2 :(得分:2)

$(function(){

    var result = [];    

    $('*').each(function(k, v){

        var classNames = $(v).prop('class');

        if(classNames){

            var classes = classNames.split(' ');

            $.each(classes, function(k2, v2){

                if($.inArray(v2, result) === -1)
                    result.push(v2);
            });
        }

    });

    console.log(result);

});

http://jsfiddle.net/ZQZ8j/1/

答案 3 :(得分:1)

jQuery("*").each(function () {
    var thisEl = jQuery(this);
    var thisClass = thisEl.attr("class");
    if (thisClass != undefined) { console.log(thisClass); }
});

答案 4 :(得分:1)

尝试

$(function(){
    var temp = {};    

    $('*').each(function(idx, el){
        var classNames = el.className;
        if(classNames){
            var classes = classNames.split(' ');
            $.each(classes, function(idx, clazz){
                temp[clazz] = true;
            });
        }
    });

    var result = $.map(temp, function(value, key){
        return key;
    })
    console.log(result);

});

演示:Fiddle

答案 5 :(得分:0)

我认为您可以使用找到未使用的CSS选择器的Firefox扩展Dust-Me

答案 6 :(得分:0)

你可以jQuery has attribute selector

$("*[class]").each(function () {
    var classNames = this.attr("class");
    // Split classNames as shown in other answers
});

它将选择具有class属性的元素,因此无需添加未定义的检查。

答案 7 :(得分:0)

使用classList但不使用jQuery的ES6解决方案

var classes = []
document.querySelectorAll('[class]').forEach((node) => {
  node.classList.forEach((className) => {
    classes.push(className)
  })
})
console.log(classes)