Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在HTML文档中查找与模式匹配的所有类?_Javascript_Jquery_Html_Css_Jquery 1.3 - Fatal编程技术网

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

Javascript 在HTML文档中查找与模式匹配的所有类?,javascript,jquery,html,css,jquery-1.3,Javascript,Jquery,Html,Css,Jquery 1.3,我今天开始思考:获得文档中使用的(最好)匹配模式(正则表达式)模式或(或者)以特定字符序列开始的类的不同(即无重复)列表的最佳方法是什么?JQuery可以用于此目的,也可以仅用于直接的Javascript 现在,它显然应该满足所有法律类用途,例如: <div class="class1 class2 class3"> </div> 我不想用正则表达式解析文档。这太容易出错了。我感兴趣的是一个Jaavascript解决方案,它可以遍历DOM或使用类似于jQuery的东

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

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

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

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

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

建议?

这对你有帮助吗


$(“输入[class*='star\u id\u 45']”)
函数类(){
var tags=document.getElementsByTagName('*');
var cls,clct={},i,j,l=tags.length;
对于(i=0;i
这是一个与regexp匹配的版本

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'))
函数类(匹配字符串){
if(匹配字符串){
var rxp=新的RegExp(匹配字符串);
}否则{
var rxp=/.*/;
}
var tags=document.getElementsByTagName('*');
var cls,clct={},i,j,l=tags.length;
对于(i=0;i
使用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;
}

某种程度上。我不知道您可以使用class属性进行通配符匹配(在href中看到),但我想没有理由不这样做。只是我没有想到。但我真正想要的是不同的类名,而不是一组包装好的元素。这也可以,但另一种解决方案更简洁(好东西)和更健壮(例如在\s+上拆分,而不是在“”上拆分)。
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'))
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;
}