2011-03-08 7 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

संभव वर्ग नामों की एक सरणी पर फ़ोरैच लूप के बारे में क्या, अपना मान असाइन करें और सही होने पर तोड़ें। – Lazarus

+0

बीमार यह कोशिश करें और देखें कि मुझे क्या मिलता है। धन्यवाद :) –

+0

[jQuery हैक्लस() के संभावित डुप्लिकेट - एक से अधिक कक्षाओं के लिए जांचें] (http://stackoverflow.com/questions/2214952/jquery-hasclass-check-for-more-than-one-class) –

उत्तर

6

कॉलम के साथ

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' 
]; 

सादा जे एस मान लिया जाये कि वर्ग नामों में से अपने सरणी है। यह अनचाहे है लेकिन तत्वों की संख्या के बावजूद काम करेगा।

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

बेशक !, सरणी के माध्यम से लूप, कक्षाओं में नहीं। बिल्कुल सही, धन्यवाद दोस्त :) –

10

निम्नलिखित यह करना चाहिए (untested):

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

के समान मैंने सोचा कि यह कैसे काम करेगा, हालांकि मैं तत्व को सौंपा गया एक से अधिक वर्ग (जैसा ओपी के अंत में कहा गया है)। –

+0

आह, उस भाग को याद किया। मैं संपादित करूंगा। – karim79

+0

अरे, शुद्ध jQuery एक कहां गया? कोई $ .each (??? – mplungjan

4

पुराने ब्राउज़र समर्थन

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, सभी की सराहना की जाती है :) –

संबंधित मुद्दे