我有一个带有几个类别的 div,没有特定的顺序。
<div class="whatever styledark myclass"></div>
我对styledark类很感兴趣。它可以是styledark、stylewhite、stylered等等。我想要获取这个类名称,无论在单词style之后跟着什么颜色。问题是,当我点击div时,如何警告显示以单词style开头的类名,而忽略div中其他类。这些类没有特定的顺序。
我有一个带有几个类别的 div,没有特定的顺序。
<div class="whatever styledark myclass"></div>
我对styledark类很感兴趣。它可以是styledark、stylewhite、stylered等等。我想要获取这个类名称,无论在单词style之后跟着什么颜色。问题是,当我点击div时,如何警告显示以单词style开头的类名,而忽略div中其他类。这些类没有特定的顺序。
这是一个很好的问题。虽然可以使用这里提到的许多答案来完成,但从性能角度来看,这有点笨拙和昂贵。我建议您将样式类放在最后,这样只用一行代码就可以输出您要查找的类名。
$('element').attr('class').split(' ').pop();
$('div').click(function() {
var style = this.className.split(/\s/).filter(function( cn ) {
return cn.indexOf('style') === 0;
});
alert(style);
});
请注意,此代码使用Array.prototype.filter
和.indexof()
,这在旧的浏览器中不可用。为了使其更通用,代码应该如下:
$('div').click(function() {
var name = '';
$.each(this.className.split(/\s/), function( _, cn ) {
if( cn.indexOf('style') === 0 ) { name = cn; return false; }
});
alert(name);
});
$('div').click(function(){
var c = $(this).attr('class').split(/\s+/);
for(var s in c)
if(c[s].indexOf('style') == 0)
alert(c[s]);
});
我以前使用过classList属性,但不幸的是它在safari中似乎不存在。 :( 下面是我想到的解决方法,但是RegExp可能需要稍微调整一下。
$('div.button').each(function() {
$m = this.className.match(/(^|\s)style\S+(\s|$)/);
if($m) {
$(this).bind('click', { colorName : $m[0] }, function(e) {
alert(e.data.colorName);
);
}
});
var icons = ["Star", "Plus", "Left", "Right", "Up", "Down"];
$("div.button").each(function() {
var $dv = $(this);
$.each(icons, function() {
if ($dv.hasClass("icon" + this)) {
$dv.append('<img src="Images/' + this + '.gif" alt="" />');
return false;
}
});
});
classes = classes.split(" ");
for (var i=0; i<classes.length; i++)
{
var class = classes[i];
if (class.indexOf("style") == 0)
{
alert(class);
}
}
$("div[class]").click(function(e){
$.each(this.className.split(/\s/), function(i, val) {
if (/^style/.test(val)) {
alert(val.substr(5));
return false;
}
});
});
$('element').attr("class").split(" ").filter(getStyleClass);
function getStyleClass(value) {
return value.indexOf("style") > -1;
}
当点击时,根据您的指定,警报“style”类:
$('element').click(function()[
var style_class = $(this).attr("class").split(" ").filter(getStyleClass);
alert(style_class);
}
// include the same getStyleClass from above
更深入的了解:
$('element').attr("class").split(" ")
是一个很好的开始 - 它将类放在一个数组中,但是 .pop()
只是简单地删除数组的最后一个元素,并没有解决问题。
.filter()
是一个很好的解决方案,因为你可以编写一个小函数来决定哪些元素你想要。
在我们的例子中,我们只想要数组中具有 'style' 的元素。我们可以使用 .indexOf()
来判断字符串是否包含 "style" ,像这样:value.indexOf("style") > -1
。