我今天想到:获得文档中使用的类别(即,没有重复)列表的最佳方法是什么(最好)匹配模式(正则表达式)模式或(或者)从某个开始字符序列? JQuery可以用于此或只是直接使用Javascript。
现在它显然应该满足所有法律类的用法,例如:
<div class="class1 class2 class3">
</div>
我不想用正则表达式解析文档。这太容易出错了。我感兴趣的是一个Jaavascript解决方案,它可以使用DOM或使用jQuery之类的东西来实现这一目标。
哦,这应该还包括通过以前的Javascript代码动态添加/删除的任何类。
建议?
答案 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;
}