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

发布于 2024-07-13 14:48:23 字数 385 浏览 11 评论 0原文

我今天开始思考:获得文档中使用的不同(即无重复)类列表(最好)匹配模式(正则表达式)模式或(或者)以某个字符序列开始的最佳方法是什么? JQuery 可以用于此目的,也可以直接使用 Javascript。

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

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

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

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

建议?

I got to thinking today: what is the best way of getting a distinct (ie no repeats) list of classes used in a document that (preferably) match a pattern (regular expression) pattern or (alternatively) start with a certain character sequence? JQuery can be used for this or just straight Javascript.

Now it should obviously cater for all legal class usages, for example:

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

And I don't want to parse the document with regular expressions. That's simply too error prone. What I'm interested in is a Jaavascript solution that walks the DOM or uses something like jQuery to do that.

Oh this should also include any classes that have been dynamically added/removed through previous Javascript code.

Suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

看轻我的陪伴 2024-07-20 14:48:23
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'))
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())

Heres a version with a regexp match

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'))
鸵鸟症 2024-07-20 14:48:23

这可以帮助你吗?

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']")

Can this help you?

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']")
把回忆走一遍 2024-07-20 14:48:23

使用 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;
}

Using 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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文