คำถามนี้ทำให้ฉันได้รับความสนใจจากคำถามอื่นซึ่งถูกทำเครื่องหมายว่าซ้ำกับคำถามนี้
คำตอบนี้สรุปคำตอบที่ยอมรับพร้อมรายละเอียดเพิ่มเติมเล็กน้อย
คุณกำลังพยายามเพิ่มประสิทธิภาพโดยหลีกเลี่ยงการตรวจสอบที่ไม่จำเป็นในเรื่องนี้นี่คือปัจจัยที่คุณต้องระวัง:
- เป็นไปไม่ได้ที่จะมีชื่อคลาสซ้ำกันในแอตทริบิวต์คลาสโดยการจัดการองค์ประกอบ DOM ผ่าน JavaScript หากคุณมี
class="collapse"
ใน HTML การโทรElement.classList.add("collapse");
จะไม่เพิ่มคลาสยุบเพิ่มเติม ฉันไม่ทราบการใช้งานพื้นฐาน แต่ฉันคิดว่ามันควรจะดีพอ
- JQuery ทำการตรวจสอบ
addClass
และremoveClass
การใช้งานที่จำเป็น (ฉันตรวจสอบซอร์สโค้ด ) สำหรับaddClass
หลังจากทำการตรวจสอบบางอย่างแล้วและหากมีคลาสอยู่ JQuery จะไม่พยายามเพิ่มอีกครั้ง ในทำนองเดียวกันremoveClass
JQuery จะทำบางอย่างตามบรรทัดcur.replace( " " + clazz + " ", " " );
ซึ่งจะลบคลาสก็ต่อเมื่อมีอยู่
ที่น่าสังเกต JQuery ทำการเพิ่มประสิทธิภาพบางอย่างในremoveClass
การนำไปใช้งานเพื่อหลีกเลี่ยงการแสดงผลแบบไร้จุดหมาย มันเป็นแบบนี้
...
// only assign if different to avoid unneeded rendering.
finalValue = value ? jQuery.trim( cur ) : "";
if ( elem.className !== finalValue ) {
elem.className = finalValue;
}
...
ดังนั้นการเพิ่มประสิทธิภาพไมโครที่ดีที่สุดที่คุณสามารถทำได้คือเพื่อหลีกเลี่ยงค่าใช้จ่ายในการเรียกฟังก์ชันและการตรวจสอบการใช้งานที่เกี่ยวข้อง
สมมติว่าคุณต้องการสลับคลาสที่ตั้งชื่อcollapse
ถ้าคุณเป็นผู้ควบคุมว่าจะเพิ่มหรือลบคลาสเมื่อใดและหากไม่มีcollapse
คลาสในตอนแรกคุณสามารถปรับแต่งได้ดังนี้:
$(document).on("scroll", (function () {
// hold state with this field
var collapsed = false;
return function () {
var scrollTop, shouldCollapse;
scrollTop = $(this).scrollTop();
shouldCollapse = scrollTop > 50;
if (shouldCollapse && !collapsed) {
$("nav .branding").addClass("collapse");
collapsed = true;
return;
}
if (!shouldCollapse && collapsed) {
$("nav .branding").removeClass("collapse");
collapsed = false;
}
};
})());
ในทางกลับกันหากคุณกำลังสลับคลาสเนื่องจากการเปลี่ยนแปลงตำแหน่งการเลื่อนขอแนะนำอย่างยิ่งให้เร่งการจัดการเหตุการณ์การเลื่อน
.hasClass
เฉพาะเมื่อผมต้องตรวจสอบว่าชั้นอยู่แล้วถ้าฉันเพียงแค่ต้องกำหนดระดับ -.addClass
ใช้ฉัน jQuery ไม่ซ้ำชั้นเรียน