jQuery可以获取某些类,但不能获取其他类

jQuery get certain classes but not others

本文关键字:获取 但不能 其他 jQuery      更新时间:2023-09-26

我有一个div,看起来像

<div class="draggable resizable abc table shadow"></div>

类没有特定的顺序。如果我做了$('div').attr('class'),那么我得到了该div的所有类的列表。我想要的是只得到不是resizable, draggabletable的类。在这种情况下,我想要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"]

请注意,如果您只想要一个适合将className设置为。

的字符串,则不需要第二个replace(您不需要去掉前导和尾随空格)。

但是,如果您只是想从元素中删除一组已知的类,那么最好直接:

$(...).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:not selectors

相关文章: