JQuery এ 2 ক্লাস টগল করার সহজ উপায়


217

যদি আমার ক্লাস থাকে .এ এবং ক্লাস। বি এবং বোতাম ক্লিকের মধ্যে স্যুইচ করতে চান, jQuery এর জন্য একটি দুর্দান্ত সমাধান কি? আমি এখনও বুঝতে পারি না কিভাবে toggleClass()কাজ করে।

এটি onclick=""ইভেন্টে রাখার জন্য কোনও ইনলাইন সমাধান আছে ?


5
ইনলাইন জেএস ( onclick="") খারাপ। আপনি কেন সঠিক ইভেন্ট হ্যান্ডলারটি নিবন্ধিত করতে jQuery ব্যবহার করবেন না (বা যদি আপনার একই হ্যান্ডলারের সাথে প্রচুর উপাদান থাকে তবে কোনও প্রতিনিধি / লাইভ ইভেন্ট)
থিফমাস্টার

উত্তর:


511

যদি আপনার উপাদানটি Aশুরু থেকে শ্রেণি উন্মোচিত করে তবে আপনি লিখতে পারেন:

$(element).toggleClass("A B");

এটি ক্লাসটি সরিয়ে ক্লাস Aযুক্ত করবে B। আপনি যদি আবার এটি করেন তবে এটি ক্লাসটি সরিয়ে দেবে Bএবং ক্লাস পুনর্বহাল করবে A

আপনি যদি উভয় শ্রেণীর উদ্ভাসিত উপাদানগুলির সাথে মেলে করতে চান তবে আপনি একাধিক শ্রেণীর নির্বাচক ব্যবহার করতে পারেন এবং লিখতে পারেন:

$(".A, .B").toggleClass("A B");

3
কি তবে যদি উপাদানটির পরিবর্তে আমি রাজ্যের উপর নির্ভর করে ক্লাস এ বা বি স্থাপন করতে চাই?
স্টিভি গ্রিফিন

1
সচেতন হন যে প্রতিবার উপাদানগুলি নির্বাচন করার পরিবর্তে আপনি যে বিষয়টিকে টগল করার চেষ্টা করছেন সেটিকে আপনার ক্যাশে করা উচিত, ক্লিক হ্যান্ডলারের মধ্যে টগলিং ক্লাসগুলির সর্বাধিক সাধারণ ব্যবহার। var $trigger = $(".A"); $trigger.on("click", function() {$trigger.toggleClass("A B")});
মমিবোট

1
@ মমিবোট - সংমিশ্রণ হিসাবে পতাকাঙ্কিত। ফ্রেডেরিক - যদি উপাদানটির "শুরু থেকে" শ্রেণি না থাকে? এটি একটি গুরুত্বপূর্ণ রাষ্ট্রও।
vsync

3
এটি আর কাজ করে না। এখন একই সাথে উভয় ক্লাস যুক্ত এবং সরান।
ফবিউন

1
@ ফ্রাডেরিক হামিদি আমি জানি না আমি কী ভুল করেছিলাম কিন্তু চেষ্টা করার সময় এটি কার্যকর হয়নি। এখন এটা ঠিক আছে মনে হচ্ছে। আমার ক্ষেত্রে এটি একই সাথে উভয় ক্লাস যুক্ত করেছে এবং সরিয়ে দিয়েছে তবে এটি এখন কাজ করছে বলে মনে হচ্ছে। সম্ভবত আমি অন্য কিছু গোলমাল করেছি এবং এটি এই ফাংশনটিকে প্রভাবিত করে। আমি আমার মন্তব্য মুছে ফেললাম। বিভ্রান্তির জন্য দুঃখিত.
বুড়াকুয়েদা

40

এখানে একটি সরলীকৃত সংস্করণ দেওয়া হয়েছে: ( যদিও মার্জিত নয় তবে সহজে অনুসরণযোগ্য )

$("#yourButton").toggle(function() 
{
        $('#target').removeClass("a").addClass("b"); //Adds 'a', removes 'b'

}, function() {
        $('#target').removeClass("b").addClass("a"); //Adds 'b', removes 'a'

});

বিকল্পভাবে, অনুরূপ সমাধান:

$('#yourbutton').click(function()
{
     $('#target').toggleClass('a b'); //Adds 'a', removes 'b' and vice versa
});

3
আমি বিশ্বাস করি ব্যবহারের এই ভাবে toggleমধ্যে jQuery 2.0 অনুমোদিত হয়নি করা হয়
Vittore

3
ধন্যবাদ ভিটোর এটি সম্ভবত ২০১১ সালের একটি পুরানো উত্তর I've আমি সেই অনুযায়ী বাক্য গঠনটি আপডেট করেছি।
রিওন উইলিয়ামস

4

আমি DRY কাজ করার জন্য একটি jQuery প্লাগইন তৈরি করেছি:

$.fn.toggle2classes = function(class1, class2){
  if( !class1 || !class2 )
    return this;

  return this.each(function(){
    var $elm = $(this);

    if( $elm.hasClass(class1) || $elm.hasClass(class2) )
      $elm.toggleClass(class1 +' '+ class2);

    else
      $elm.addClass(class1);
  });
};

আপনি এখানে এটি চেষ্টা করে দেখতে পারেন, এটি অনুলিপি করে কনসোলে চালাতে পারেন এবং তারপরে চেষ্টা করুন:

$('body').toggle2classes('a', 'b');

2

আপনার onClickঅনুরোধ:

<span class="A" onclick="var state = this.className.indexOf('A') > -1; $(this).toggleClass('A', !state).toggleClass('B', state);">Click Me</span>

এটি ব্যবহার করে দেখুন: https://jsfiddle.net/v15q6b5y/


কেবল জেএসলা লা jQuery :

$('.selector').toggleClass('A', !state).toggleClass('B', state);

1

এখানে আরও একটি 'অপ্রচলিত' উপায়।

  • এটি আন্ডারস্কোর বা লোডাশ ব্যবহার বোঝায় ।
  • এটি এমন একটি প্রসঙ্গ ধরেছে যেখানে আপনি:
    • উপাদানটির একটি আর ডি ক্লাস নেই (এর অর্থ আপনি টগলক্লাস করতে পারবেন না ('a বি'))
    • আপনি কোথাও থেকে গতিশীল ক্লাস পেতে হবে

এই দৃশ্যের উদাহরণটি এমন বোতাম হতে পারে যা ক্লাসে অন্য একটি উপাদানকে সরিয়ে রাখতে হবে (একটি পাত্রে ট্যাব বলুন)।

// 1: define the array of switching classes:
var types = ['web','email'];

// 2: get the active class:
var type = $(mybutton).prop('class');

// 3: switch the class with the other on (say..) the container. You can guess the other by using _.without() on the array:
$mycontainer.removeClass(_.without(types, type)[0]).addClass(type);

-1

সহজ সমাধান হ'ল toggleClass()পৃথকভাবে উভয় শ্রেণীর কাছে।

ধরা যাক আপনার একটি আইকন রয়েছে:

    <i id="target" class="fa fa-angle-down"></i>

নিম্নলিখিতগুলির মধ্যে টগল করতে fa-angle-downএবং fa-angle-upকরতে:

    $('.sometrigger').click(function(){
        $('#target').toggleClass('fa-angle-down');
        $('#target').toggleClass('fa-angle-up');
    });

আপনি যেহেতু প্রতিটি সময় উভয় টগল fa-angle-downনা করে শুরুতে আমরা যেহেতু শুরুতে ছিলাম fa-angle-up, তাই একটির জন্য অন্যটির উপস্থিতির জন্য ছেড়ে যায়।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.