2011-04-07 27 views
6

एक आसान, लेकिन मैं इसे समझ नहीं सकता। मेरे पास # शीर्षक नामक एक लिंक है और जब आप इसे क्लिक करते हैं तो यह # सामग्री नामक div को टॉगल करता है। यह पूरी तरह से काम करता है, लेकिन इसके अतिरिक्त मैं अपने # शीर्षक लिंक पर "सक्रिय" कक्षा जोड़ रहा हूं और मैं इसे हटा नहीं सकता, यहां तक ​​कि removeClass के साथ भी।jQuery - टॉगल और निकालें क्लास

ऊपर कोड देखें और उदाहरण लिंक (शीर्षक केवल तभी होना चाहिए जब # सामग्री का विस्तार किया जाए, हर समय नहीं)।

$('#title').click(function() { 
    $(this).addClass('active'); 
    $('#content').toggle(); 
}), function() { 
    $(this).removeClass('active'); 
}; 

http://jsfiddle.net/vY3WY/

उत्तर

19

आप टॉगल के साथ टॉगल क्लास फ़ंक्शन का उपयोग कर सकते हैं।

http://jsfiddle.net/vY3WY/1/

$('#title').click(function() { 
    $(this).toggleClass('active'); 
    $('#content').toggle(); 
}); 

या आप एक और अधिक मजबूत संस्करण है जो यह सुनिश्चित करेंगे कि वर्ग जोड़ दिया जाता है, तो सामग्री दिखाई और नहीं तो हटा दिया है का उपयोग कर सकते हैं।

http://jsfiddle.net/vY3WY/6/

$('#title').click(function() { 
    $('#content').toggle(); 
    if ($('#content:visible').size() != 0) 
    { 
     $(this).addClass('active'); 
    } 
    else 
    { 
     $(this).removeClass('active'); 
    } 
}); 
+1

1 संस्करण के लिए +1, मुझे लगता है कि यह इस समस्या के लिए पर्याप्त है – kapa

+0

पहला उदाहरण, बस वाह, दो पंक्तियां। बहुत बढ़िया! – Wordpressor

6

This version workshasClass और इसे हटाने का उपयोग कर अगर यह नहीं है 'सक्रिय' की उपस्थिति के लिए

$('#title').click(function() { 
    if($(this).hasClass('active')) { 
     $(this).removeClass('active'); 
    } else { 
     $(this).addClass('active'); 
    } 
    $('#content').toggle(); 
}); 

चेक। अगर यह नहीं है तो इसे जोड़ें।

या आप उस तर्क को छिपाने के लिए toggleClass का उपयोग कर सकते हैं।

+0

आप शायद यहाँ समाधान और न सिर्फ एक लिंक, इस सवाल अगर jsfiddle मरकर के भविष्य के दर्शकों के लिए पोस्ट करना चाहिए। :) – Gazler

5

एक कॉम्पैक्ट और अभी भी पठनीय (मुझे लगता है) समाधान:

$('#title').click(function() { 
    var isContentVisible=$('#content').toggle().is(':visible'); 
    $(this).toggleClass('active', isContentVisible); 
}); 

Live Demo

यह #content टॉगल और जाँच करता है कि यह बाद में दिखाई दे रहा है या नहीं। फिर यह परिणाम के आधार पर #title पर कक्षा को टॉगल करता है। एक लाइनर फ़ंक्शन भी हो सकता है, लेकिन यह तब मेरी पठनीयता अपेक्षाओं को पूरा नहीं करेगा।

+0

+1 - अच्छा कॉम्पैक्ट समाधान। मैं टॉगल क्लास पर स्विच के बारे में भूल गया। – Gazler

0

अन्य मूल्य

$('.my').click(function() { 
if($(this).hasClass('active')) { 
    $(this).removeClass('active'); 
} else { 
    $(this).addClass('active'); 
} 
$('.my').toggle(); 

}) के साथ छिपाने वर्तमान मूल्य के लिए एक और समाधान;

here पर क्लिक करें! यह reference links के साथ भी काम करता है।

0

मुझे लगता है कि यह करने का यह सबसे उचित तरीका है।

$(this).toggleClass('active').siblings().removeClass('active');

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