查找与HTML文档中的模式匹配的所有类?

时间:2009-02-05 10:37:39

标签: javascript jquery html css jquery-1.3

我今天想到:获得文档中使用的类别(即,没有重复)列表的最佳方法是什么(最好)匹配模式(正则表达式)模式或(或者)从某个开始字符序列? JQuery可以用于此或只是直接使用Javascript。

现在它显然应该满足所有法律类的用法,例如:

<div class="class1 class2 class3">
</div>

我不想用正则表达式解析文档。这太容易出错了。我感兴趣的是一个Jaavascript解决方案,它可以使用DOM或使用jQuery之类的东西来实现这一目标。

哦,这应该还包括通过以前的Javascript代码动态添加/删除的任何类。

建议?

3 个答案:

答案 0 :(得分:3)

这可以帮到你吗?

http://httpcode.com/blogs/PermaLink,guid,77f17d9c-cdc0-4fcb-a392-3cc70ef6ac23.aspx

<input type="radio" class="star star_id_45 star_group_5" />

$("input[class*='star_id_45']")

答案 1 :(得分:2)

function gatherClasses() {
    var tags = document.getElementsByTagName('*');
    var cls, clct = {}, i, j, l = tags.length;
    for( i = 0; i < l; i++ ) {
        cls = tags[i].className.split(' ');
        for( j = 0; j < cls.length; j++ ) {
            if( !cls[j] ) continue;
            clct[cls[j]] = 'dummy'; //so we only get a class once
        }
    }
    cls = [];
    for( i in clct ) {
        cls.push( i );
    }
    return cls;
} 
alert(gatherClasses())

这是一个正则表达式匹配的版本

function gatherClasses( matchString ) {
    if( matchString ) {
        var rxp = new RegExp( matchString );
    } else {
        var rxp = /.*/;
    }
    var tags = document.getElementsByTagName('*');
    var cls, clct = {}, i, j, l = tags.length;
    for( i = 0; i < l; i++ ) {
        cls = tags[i].className.split(' ');
        for( j = 0; j < cls.length; j++ ) {
            if( !cls[j] || !rxp.test( cls[j] ) ) {
                continue;
            }
            clct[cls[j]] = 'dummy'; //so we only get a class once
        }
    }
    cls = [];
    for( i in clct ) {
        cls.push( i );
    }
    return cls;
}
//find classes that match 'stack'
alert(gatherClasses('stack'))

答案 2 :(得分:2)

使用jQuery:

var listClasses = function( pattern ){
    var allClassesTmp = {}, allClasses = []; 
    var rx = pattern ? (new RegExp(pattern)) : (new RegExp(".*"));

    $('*[class]').each( function(){ 
        var cn = this.className.split(/\s+/); 
        for(var i=cn.length;--i>-1;){ 
            if(rx.test(cn[i]))allClassesTmp[ cn[i] ] = 1 
        } 
    }); 
    for(var i in allClassesTmp)allClasses.push(i); 
    return allClasses;
}