jQuery获得某些课程,但没有其他课程
-
26-10-2019 - |
题
我有一个看起来像
<div class="draggable resizable abc table shadow"></div>
碎屑没有具体的顺序。如果我做 $('div').attr('class')
然后,我获得了该div的所有类的列表。我想要的是只上课 resizable
, draggable
或者 table
. 。在这种情况下,我想要 abc shadow
. 。我该怎么做呢。
解决方案
var all = "draggable resizable abc table shadow";
var some = all.replace(/(?:^|\s)(resizable|draggable|table)(?=\s|$)/g, '');
console.log(some);
// " abc shadow"
console.log(some.replace(/^\s+|\s+$/g,''));
// "abc shadow"
console.log(some.split(/\s+/));
// ["", "abc", "shadow"]
请注意,您不需要第二 replace
(您不需要剥离领先和落后地点),如果您想要的只是一个适合设置的字符串 className
至。
但是,如果您只是想从一个元素中删除一组已知类别,那么最好简单地:
$(...).removeClass("draggable resizable table");
替代方案(不需要正直):
var ignore = {resizable:1, draggable:1, table:1};
var all = "draggable resizable abc table shadow".split(' ');
for (var subset=[],i=all.length;i--;) if (!ignore[all[i]]) subset.push(all[i]);
console.log(subset);
// ["shadow","abc"]
console.log(subset.join(' '));
// "shadow abc"
其他提示
插件:
(function($) {
$.fn.getClasses = function(exclude) {
var remove = {};
for(var i = exclude.length; i--;) {
remove[exclude[i]] = true;
}
return $.map(this.attr('class').split(/\s+/g), function(cls) {
return remove[cls] ? null : cls;
});
};
}(jQuery));
用法:
var classes = $('div').getClasses(['resizable', 'draggable', 'table']);
@phrogz的答案是一个很好的答案。显然,他是一条正则是对手。由于我不太了解这么好,所以这是我的看法:
var aryClasses = $("div").attr("class").split(" ");
var aryDesiredClasses = new Array();
for(var i = 0; i < aryClasses.length; i++) {
if(aryClasses[i] != "table"
&& aryClasses[i] != "resizable"
&& aryClasses[i] != "draggable")
aryDesiredClasses.push(aryClasses[i]);
}
alert(aryDesiredClasses.join(" "));
这是 一个工作的小提琴来说明.
function getDesiredClass( removedClassArr ){
var classArray = $("selector").attr('class').split(" ");
var desiredClassArray = [];
for(var i = 0; i < classArray.length; i++ ){
if ( !isUnDesiredClass(removedClassArr, classArray[i]) ){
desiredClassArray .push( classArray[i] );
}
}
return desiredClassArray;
}
function isUnDesiredClass( removedClassArr , cls){
for(var i = 0; i < removedClassArr.length; i++ ){
if( removedClassArr[i] == cls ){
return true;
}
}
return false;
}
您可以使用 .hasClass
.
$("div").hasClass("class");
这在这里得到了回答。 用jQuery获取元素的班级列表.
您可以将其扩展为仅在数组中获取不可解析,可拖动或表格的字符串
var classes = $('div').not('.resizable, .draggable, .table').attr('class').split(' ');
看看这个 JSFIDDLE, ,我的工作像您想要的。
另外,看看 jQuery:不是选择器
不隶属于 StackOverflow