Javascript jQuery获取某些类,但不获取其他类

Javascript jQuery获取某些类,但不获取其他类,javascript,jquery,class,attr,Javascript,Jquery,Class,Attr,我有一个长得像 <div class="draggable resizable abc table shadow"></div> 分类没有具体的顺序。如果我做了$('div').attr('class'),那么我会得到该div的所有类的列表。我想要的是只得到不可调整大小、拖动或表的类。在这种情况下,我需要abc阴影。如何执行此操作。您可以使用检查单个类 请注意,如果您只需要一个适合将类名设置为的字符串,则不需要第二个替换(不需要去掉前导和尾随空格) 但是,如果您试图

我有一个长得像

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


分类没有具体的顺序。如果我做了
$('div').attr('class')
,那么我会得到该div的所有类的列表。我想要的是只得到不可
调整大小
拖动
的类。在这种情况下,我需要
abc阴影
。如何执行此操作。

您可以使用检查单个类

请注意,如果您只需要一个适合将
类名设置为的字符串,则不需要第二个
替换
(不需要去掉前导和尾随空格)

但是,如果您试图从元素中删除一组已知类,那么最好是:

$(...).removeClass("draggable resizable table");
备选方案(不需要正则表达式):

这里回答了这个问题


您可以扩展它,只获取数组中不可“调整大小、拖动或表格”的字符串。

@Phrogz answer是一个很好的选择。显然,他是一个雷格士。由于我对正则表达式不太了解,以下是我对它的看法:

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(" "));
var aryClasses=$(“div”).attr(“class”).split(“”);
var arydiredClasses=新数组();
对于(var i=0;i
这是一个插件:

(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']);
函数getDesiredClass(removedClassArr){
var classArray=$(“选择器”).attr('class').split(“”);
var desiredClassArray=[];
对于(var i=0;i
看看这个,我有一个你想要的东西


另外,看看

这并没有回答这个问题。这是一种尝试,它提供了一个比你现在所做的更好的解决方案。您应该告诉我们潜在的问题,这样我们才能提供更好的解决方案。因此,您想要的是实际的类名,而不是HTML元素?提示:如果您解释您想要做什么,而不是(或者除了)询问您认为可以实现它的一种方法,您将得到更好的答案。为什么你想要一个减去其他类的类列表?(你打算用它们做什么。)谢谢,但是我在每个类前面都有逗号,比如
,abc,shadow
我想在每个类后面都有一个空格,看起来像
abc shadow
@Pinkie:
some.split(/\s+/)
返回一个数组。您可以按任何方式连接它的元素。取消拆分将为您提供一个适合将类设置为的空格分隔字符串(如果您正试图这样做的话)。这与问题无关。我不确定您为什么认为这与问题无关。引用的post提供了一种从元素中获取所有类名并将它们填充到数组中的方法。然后,使用该数组并解析出不需要的3个类。为了增强答案,您可能应该根据问题调整答案中的代码,而不是简单地链接到它。我认为您需要否定(
if(aryClasses[I]!=“resizeable”| |……)
),而不是只匹配已知的类。很好+1显示
$.map
以及
null
自动压缩结果。(我个人可能会将该方法重命名为
getClassesWithout
,但这比任何其他方法都重要。)@Josh:不知道你为什么这么做,但它没有改变任何东西,事实上JSLint更喜欢另一种方法。@FelixKling我的错,你是对的,乍一看我认为这是一个打字错误@达维马金托什:你不明白这个问题。OP需要的是类列表,而不是元素列表。@Pinkie:fiddle的最后一行有错误:
);)应该是
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($) {
    $.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']);
        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;
    }
var classes = $('div').not('.resizable, .draggable, .table').attr('class').split(' ');