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(' ');