2011-03-08 65 views
9

我试图检查一个元素是否有一个数组中的类,如果有的话,那个类的值是什么。目前我正在使用:jQuery - 检查元素是否有数组中的类?

if ($(this).hasClass('purple_grad')) { 
      $thisFKeyColour = 'purple_grad'; 
     } else if ($(this).hasClass('red_grad')) { 
      $thisFKeyColour = 'red_grad'; 
     } else if ($(this).hasClass('green_grad')) { 
      $thisFKeyColour = 'green_grad'; 
     } else if ($(this).hasClass('blue_grad')) { 
      $thisFKeyColour = 'blue_grad'; 
     } else if ($(this).hasClass('yellow_grad')) { 
      $thisFKeyColour = 'yellow_grad'; 
     } else if ($(this).hasClass('light_yellow_grad')) { 
      $thisFKeyColour = 'light_yellow_grad'; 
     } else if ($(this).hasClass('lighter_yellow_grad')) { 
      $thisFKeyColour = 'lighter_yellow_grad'; 
     } else if ($(this).hasClass('grey_grad')) { 
      $thisFKeyColour = 'grey_grad'; 
     } else if ($(this).hasClass('light_grey_grad')) { 
      $thisFKeyColour = 'light_grey_grad'; 
     } else if ($(this).hasClass('black_grad')) { 
      $thisFKeyColour = 'black_grad'; 
     } 
} 
alert($thisFKeyColour); 

有没有更好的方法来做到这一点?就像:

if (in_array(classes, element.attr('class'))) { 
    $thisFKeyColour = Class_Of_Element_That_Matched_Array; 
} 

另外,我不能只返回.attr('类'),因为它们是元素上的多个类。

干杯
查理

+0

对于可能的类名称数组上的foreach循环怎么样,如果为true,则分配您的值并中断。 – Lazarus 2011-03-08 12:46:32

+0

我试试看看我得到了什么。谢谢:) – 2011-03-08 12:51:52

+0

可能重复的[jQuery hasClass() - 检查多个类](http://stackoverflow.com/questions/2214952/jquery-hasclass-check-for-more-than-one-class) – 2015-05-08 09:10:24

回答

6

的cols是你的类名称的数组。这是未经测试的,但无论元素具有多少个类别都可以工作。

for (var i = 0; i < cols.length; i++) 
{ 
    if ($(this).hasClass(cols[i])) 
    { 
    $thisFKeyColour = cols[i]; 
    break; 
    } 
} 
+0

当然!,循环遍历数组,而不是类。完美,谢谢队友:) – 2011-03-08 12:59:53

10

下应该这样做(未经测试):

var elementClasses = $(this).attr("class").split(" "); 
for(var i = 0; i < elementClasses.length; i++) { 
    if($.inArray(elementClasses[i], classes)) { 
     $thisFKeyColour = classes[i]; 
     break; 
    } 
} 

Try it out here.

参考:

http://api.jquery.com/jQuery.inArray/

+0

我认为这是它将如何工作,虽然我有不止一个类被分配给元素(如在OP结尾处所述)。 – 2011-03-08 12:50:32

+0

啊,错过了那部分。我会编辑。 – karim79 2011-03-08 12:51:30

+0

嘿,纯粹的jQuery去哪了?没有$ .each(??? – mplungjan 2011-03-08 12:55:06

4

假设

var possibleFKeyColors = [ 
      'purple_grad', 
      'red_grad', 
      'green_grad', 
      'blue_grad', 
      'yellow_grad', 
      'light_yellow_grad', 
      'lighter_yellow_grad', 
      'grey_grad', 
      'light_grey_grad', 
      'black_grad' 
]; 

纯JS与旧的浏览器支持

var hasIndexOf = Array.prototype.indexOf, // older browsers 
    testClasses = (hasIndexOf)?"":"@"+possibleFKeyColors.join("@")+"@"; 
function getClass(obj) { 
    var possibleClasses = obj.getAtttribute("class").split(" "); 
    for (var i=0;i<possibleClasses.length;i++) { // or some jQuery array scanner 
    if (
    (hasIndexOf && possibleFKeyColors.indexOf(possibleClasses[i]) !=-1) || 
    (!hasIndexOf && testClasses.indexOf("@"+possibleClasses[i]+"@") !=-1) 
    ) return = possibleClasses[i]; 
    } 
    return ""; 
} 

var FKeyColour = getClass(document.getElementById("someObject")); 

jQuery的

function getClass(obj) { 
    var thisFKeyColour = ""; 
    $.each(possibleFKeyColors, function(i,class) { 
    if (obj.hasClass(class)) { 
     thisFKeyColour=class; 
     return false; 
    } 
    } 
    return thisFKeyColour; 
} 

var FKeyColour = getClass($("#someObject")); 
+0

感谢@mplungjan的帮助,所有人都赞赏:) – 2011-03-08 13:02:41