过滤给定元素上的类列表的最有效方法是什么?
<div class="foo bar"></div>
<div class="bim bar"></div>
$("div.bar").click(function(ev) {
alert("The non-bar class was:" + ???);
});
我知道我可以写一个for循环来浏览ev.currentTarget.classList,但我想知道是否有更好的方法。
编辑:我想澄清一下,我希望警报告诉我“foo”和“bim”。我不想替换“bar”,我只是希望能够访问非bar的类。感谢。
答案 0 :(得分:5)
没有 jQuery 的方式来实现这一点,但我会这样做:
$("div.bar").click(function(ev) {
var nonBarClasses = (' ' + this.className + ' ').replace(' bar ', ' ').split(/ +/);
nonBarClasses.shift();
nonBarClasses.pop();
// nonBarClasses is now an array, with each element a class that isn't `bar`
alert("The non-bar class was: " + nonBarClasses.join(" "));
});
在此处查看此行动:http://jsfiddle.net/PpUeX/2
答案 1 :(得分:4)
您可以使用jQuery.fn.attr()
从元素中获取整个类字符串,然后split()
将其添加到数组中,您可以使用该数组执行任何操作。
$("div.bar").click(function(ev) {
var classes = $(this).attr('class').split(' '); // [0:'foo', 1:'bar']
});
编辑:至于提供一个“jQuery” - 获取所有非“bar”类的方法,你可以在点击的元素和clone()
之前创建一个临时的removeClass()
条形类你用它做任何事情:
$("div.bar").click(function(ev) {
var noBarClasses = $(this)
.clone().removeClass('bar') // <-- no more "bar"
.attr('class').split(' '); // [0:'foo']
});