JQuery获取以字符串"whatever-"开头的其余元素类名

6

我有一份JavaScript代码,可以缓存那些以“whatever-”开头的类。

$('[class^="whatever-"], [class*=" whatever-"]')

但是现在我想要做的是获取名称的其余部分,例如在“whatever-9”的情况下,我想要获取“9”,我不知道该如何做,你能帮我吗?


在应用函数中,猜测一下,“$(this).attr("class").substr("whatever-".length)” 的含义。 - Dave Chen
3个回答

7

试试这个

var check = "whatever-";         
    $('[class^="whatever-"], [class*=" whatever-"]').each(function () {    
        // Get array of class names   
        var cls = $(this).attr('class').split(' ');       
        for (var i = 0; i < cls.length; i++) {
            // Iterate over the class and log it if it matches
            if (cls[i].indexOf(check) > -1) {        
                console.log(cls[i].slice(check.length, cls[i].length));
            }       
        }    
    });

当存在多个类时,这种方法也适用。可以使用filter方法和一些regex来更加简洁地完成此操作。

查看 Fiddle

使用map可以使代码更加简洁。

var check = "whatever-";
$('[class^="whatever-"], [class*=" whatever-"]').each(function () {
    var className = this.className;

    var cls = $.map(this.className.split(' '), function (val, i) {
        if (val.indexOf(check) > -1) {
            return val.slice(check.length, val.length)
        }
    });

    console.log(cls.join(' '));
});

Map demo


是的,这也应该可以工作,但我认为最好的解决方案是“Sergio”写的,那是一段更“清晰”的代码。 - Irakli

1
也许有更好的方法,但这个方法可以。请检查控制台。 演示
$('[class^="whatever-"], [class*=" whatever-"]').each(function () {
    var classname = this.className;
    var classsparts = classname.split('whatever-');
    var result = classsparts[1]
    console.log(result);
});

假设您的选择器只针对一个类中的元素。

不错..我认为var classname = this.className会更好。 :) - Mr_Green
很好的观点@Mr_Green!那么JS几乎是全部了。编辑了答案。 - Sergio
Sergio,如果元素上有多个类名,你的解决方案只适用于一个类名。但是,如果有其他类名在“whatever-”之后设置,控制台会返回这些类名。 - Irakli
@Irakli,没错。我也写了那个。Sushanth的回答很好 :) - Sergio

0

或者如果你喜欢一点正则表达式,我会使用这个,因为嘿,它只有一行。

$("*").filter(function(){ return /whatever-.+/.test( $(this).attr("class") ) } );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接