Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 jQuery获取特定的类名_Javascript_Jquery_Class - Fatal编程技术网

Javascript jQuery获取特定的类名

Javascript jQuery获取特定的类名,javascript,jquery,class,Javascript,Jquery,Class,我有一个div,没有特定的顺序,只有几个类 <div class="whatever styledark myclass"></div> 我对styledark课程感兴趣。这可以是黑色、白色、红色。。。。我想得到这个类名,不管单词style后面是什么颜色。问题是,当我单击div时,我如何提醒这个以单词style开头的类名,而不考虑div中的其他类。这些类没有特定的顺序 假设在名为“classes”的变量中有类名列表: classes=classes.split(“”

我有一个div,没有特定的顺序,只有几个类

<div class="whatever styledark myclass"></div>


我对styledark课程感兴趣。这可以是黑色、白色、红色。。。。我想得到这个类名,不管单词style后面是什么颜色。问题是,当我单击div时,我如何提醒这个以单词style开头的类名,而不考虑div中的其他类。这些类没有特定的顺序

假设在名为“classes”的变量中有类名列表:

classes=classes.split(“”);
对于(var i=0;i
注意:此代码使用
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);
});
可在此处找到:

var图标=[“星形”、“加号”、“左”、“右”、“向上”、“向下”];
$(“div.button”)。每个(函数(){
var$dv=$(本);
$.each(图标、函数(){
如果($dv.hasClass(“图标”+此)){
$dv.追加(“”);
返回false;
}
});
});

实例:

这是一个很好的问题。虽然可以使用这里提到的许多答案来完成,但这在性能方面有点笨拙和昂贵。我建议您这样做的方式是将样式类放在最后,这样只需一行代码就可以输出所需的类名

$('element').attr('class').split(' ').pop();

我曾经使用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);
        );
    }
});
并按指定在单击时向“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

这不是不可能的,但它很笨拙。而且,它会非常缓慢。你不能向属性添加另一个类吗?为什么要这样做?你的最终目标是什么?@lonesomeday我想知道div有什么颜色类。除非你能推荐一个,否则我看不到解决方法。@felix,用户使用提供的工具,当用户返回编辑表单时,可用样式的编辑选择框应突出显示表单的当前样式。了解表单当前样式颜色的唯一方法是获取以StyleThank@jandy开头的类名,但它必须是跨浏览器的。在上面的注释中解释了我的情况回答felix,我想知道这是否是我想要做的事情的最佳方式。@Pinkie:好吧,除了IE7和以下版本之外,它实际上是非常交叉的。但是,我添加了一个更兼容的版本。@Hussein这个怎么样:
$('element').attr('class').split('.filter('myclass'))
@SIFE什么是myclass??全名未知。OP在以style开头的类名之后。@Hussein myclass指的是他正在寻找的类。@Hussein。谢谢你的建议。这很有意义。我只需要找出我的代码,看看如何将这个style类放在最后。使用con听起来很讨厌像“将样式类放在最后”这样的创新。就个人而言,我更喜欢一种更加防弹的解决问题的方法+我不认为这种“代码行”在某种程度上比其他答案更有效(它仍然使用css选择器并且仍然访问“类”属性)。
$("div[class]").click(function(e){
    $.each(this.className.split(/\s/), function(i, val) {
        if (/^style/.test(val)) {
            alert(val.substr(5));
            return false;
        }
    });
});
$('div').click(function(){
    var c = $(this).attr('class').split(/\s+/);
    for(var s in c)
        if(c[s].indexOf('style') == 0)
            alert(c[s]);
});
$('element').attr('class').split(' ').pop();
$('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);
        );
    }
});
$('element').attr("class").split(" ").filter(getStyleClass);

function getStyleClass(value) {
    return value.indexOf("style") > -1;
}
$('element').click(function()[
    var style_class = $(this).attr("class").split(" ").filter(getStyleClass);
    alert(style_class);
}
// include the same getStyleClass from above