หากฉันมีคลาส. A และคลาส. B และต้องการสลับระหว่างการคลิกปุ่มสิ่งที่ดีสำหรับ jQuery คืออะไร ฉันยังไม่เข้าใจวิธีการtoggleClass()
ทำงาน
มีวิธีแก้ไขปัญหาแบบอินไลน์เพื่อนำมาใช้ในonclick=""
เหตุการณ์หรือไม่?
หากฉันมีคลาส. A และคลาส. B และต้องการสลับระหว่างการคลิกปุ่มสิ่งที่ดีสำหรับ jQuery คืออะไร ฉันยังไม่เข้าใจวิธีการtoggleClass()
ทำงาน
มีวิธีแก้ไขปัญหาแบบอินไลน์เพื่อนำมาใช้ในonclick=""
เหตุการณ์หรือไม่?
คำตอบ:
หากองค์ประกอบของคุณเปิดเผยคลาสA
ตั้งแต่เริ่มต้นคุณสามารถเขียน:
$(element).toggleClass("A B");
นี้จะลบระดับและเพิ่มระดับA
B
ถ้าคุณทำเช่นนั้นอีกครั้งมันจะลบคลาสB
และคืนสถานะคลาสA
และคืนสถานะระดับ
หากคุณต้องการจับคู่องค์ประกอบที่แสดงคลาสอย่างใดอย่างหนึ่งคุณสามารถใช้ตัวเลือกคลาสหลาย คลาสและเขียน:
$(".A, .B").toggleClass("A B");
var $trigger = $(".A"); $trigger.on("click", function() {$trigger.toggleClass("A B")});
นี่เป็นเวอร์ชั่นที่เรียบง่าย: (ถึงแม้ว่าจะไม่ได้สวยงาม แต่ก็ง่ายที่จะติดตาม )
$("#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
});
toggle
นี้มีการระบุไว้ใน jQuery 2.0
ฉันได้ทำปลั๊กอิน jQuery เพื่อทำงาน DRY:
$.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');
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/
เพียงแค่ JS à la jQuery :
$('.selector').toggleClass('A', !state).toggleClass('B', state);
นี่เป็นอีกวิธีที่ "ไม่ธรรมดา"
ตัวอย่างของสถานการณ์นี้อาจเป็นปุ่มที่มีคลาสที่จะเปิดในองค์ประกอบอื่น (พูดแท็บในภาชนะ)
// 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);
ทางออกที่ง่ายที่สุดคือ 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
เวลาที่คุณสลับทั้งสองอย่างหนึ่งจะปล่อยให้อีกอันปรากฏ
สลับไปมาระหว่างสองคลาส 'A' และ 'B' กับ Jquery
$ ('# selecor_id'). toggleClass ("A B");
onclick=""
) ไม่ดี ทำไมคุณไม่ใช้ jQuery เพื่อลงทะเบียนตัวจัดการเหตุการณ์ที่เหมาะสม (หรือตัวแทน / เหตุการณ์สดหากคุณมีองค์ประกอบมากมายด้วยตัวจัดการเดียวกัน)