jQuery: ตรวจสอบว่า div มีชื่อคลาสที่แน่นอนอยู่หรือไม่


235

ใช้ jQuery ฉันกำลังสร้างโปรแกรมdivแบบนี้:

<div class="mydivclass" id="myid1">Some Text1</div>
<div class="mydivclass" id="myid2">Some Text2</div>

ที่อื่นในรหัสของฉันฉันต้องตรวจสอบว่า DIV เหล่านี้อยู่ ชื่อคลาสสำหรับ divs เหมือนกัน แต่ ID จะเปลี่ยนสำหรับแต่ละ div มีความคิดวิธีตรวจจับพวกเขาโดยใช้ jQuery ไหม

คำตอบ:


424

คุณสามารถทำให้สิ่งนี้ง่ายขึ้นโดยการตรวจสอบวัตถุแรกที่ส่งคืนจาก JQuery ดังนี้:

if ($(".mydivclass")[0]){
    // Do something if class exists
} else {
    // Do something if class does not exist
}

ในกรณีนี้หากมีค่าความจริงที่[0]ดัชนี( ) แรกแล้วถือว่าคลาสมีอยู่

แก้ไข 2013/04/10:ฉันได้สร้างกรณีทดสอบ jsperf ที่นี่


จุดดีไม่ว่าจะเป็นเพียงการค้นหาคุณสมบัติ ฉันไม่สนใจเกี่ยวกับสี่ตัวอักษร แต่นี้อาจจะชัดเจนขึ้นอยู่กับบริบท ...
TJ Crowder

ฉันลงเอยด้วยการใช้โซลูชันนี้แม้ว่าจะมีวิธีแก้ไขปัญหาอื่นที่ใช้งานได้เช่นกัน ขอบคุณสำหรับคำตอบที่รวดเร็ว
avatar

1
ที่น่าสนใจคุณอาจคิดว่าการขว้าง:firstบนนั้นจะช่วยให้ประสิทธิภาพ (ไม่ทราบว่าประสิทธิภาพเป็นเกณฑ์ที่สำคัญสำหรับ @itgorilla) แต่ไม่ว่าเบราว์เซอร์จะแตกต่างกันอย่างดุเดือดเพราะอาจเปลี่ยนคุณสมบัติดั้งเดิม jQuery สามารถใช้เพื่อทำ การเลือก นี่คือกรณีทดสอบที่ div ที่มีอยู่และที่นี่เป็นหนึ่งในสถานที่ที่มันไม่ได้อยู่
TJ Crowder

และถ้าฉันไม่ต้องการรันรหัสถ้าไม่มีคลาส?
โทมัสเซบาสเตียน

1
@ThomasSebastian Tryif (!$(".mydivclass")[0]){ /* do stuff */ }
Shaz

117

คุณสามารถใช้ได้ size()แต่ jQuery แนะนำให้คุณใช้ความยาวเพื่อหลีกเลี่ยงโอเวอร์เฮดของการเรียกใช้ฟังก์ชันอื่น:

$('div.mydivclass').length

ดังนั้น:

// since length is zero, it evaluates to false
if ($('div.mydivclass').length) {

http://api.jquery.com/size/

http://api.jquery.com/length/

UPDATE

คำตอบที่เลือกใช้การทดสอบแบบสมบูรณ์ แต่มันมีข้อบกพร่องเล็กน้อยเนื่องจากมันยังรวมถึงการเลือกองค์ประกอบเป็นส่วนหนึ่งของความสมบูรณ์แบบซึ่งไม่ใช่สิ่งที่ถูกทดสอบที่นี่ นี่คือการทดสอบ perf ที่อัพเดทแล้ว:

http://jsperf.com/check-if-div-exists/3

การทดสอบครั้งแรกของฉันแสดงให้เห็นว่าการดึงคุณสมบัติเร็วกว่าการดึงดัชนีแม้ว่า IMO จะไม่สำคัญนัก ฉันยังคงชอบการใช้ความยาวสำหรับฉันมันเหมาะสมกว่าสำหรับเจตนาของรหัสแทนที่จะเป็นเงื่อนไขที่สั้นกว่า


3
ตามลิงค์ที่คุณระบุไว้ในเครื่องมือบน jsperf.com .lengthขณะนี้มีประสิทธิภาพโดยเฉลี่ยที่ดีที่สุด
gmeben

ตอบสนองความต้องการของฉันด้วยประสิทธิภาพที่น้อยที่สุดสำหรับการตรวจสอบ
David O'Regan

77

ไม่มี jQuery:

จาวาสคริปต์ดั้งเดิมจะเร็วขึ้นเสมอ ในกรณีนี้: (ตัวอย่าง)

if (document.querySelector('.mydivclass') !== null) {
    // .. it exists
}

ถ้าคุณต้องการตรวจสอบเพื่อดูว่าองค์ประกอบหลักประกอบด้วยองค์ประกอบอื่นที่มีคลาสที่ระบุคุณสามารถใช้อย่างใดอย่างหนึ่งต่อไปนี้ (ตัวอย่าง)

var parent = document.querySelector('.parent');

if (parent.querySelector('.child') !== null) {
    // .. it exists as a child
}

หรือคุณสามารถใช้.contains()วิธีการกับองค์ประกอบหลัก (ตัวอย่าง)

var parent = document.querySelector('.parent'),
    child = document.querySelector('.child');

if (parent.contains(child)) {
    // .. it exists as a child
}

.. และในที่สุดถ้าคุณต้องการตรวจสอบเพื่อดูว่าองค์ประกอบที่กำหนดมีเพียงระดับหนึ่งใช้:

if (el.classList.contains(className)) {
    // .. el contains the class
}

57
$('div').hasClass('mydivclass')// Returns true if the class exist.

3
จริงนี่คือทางเลือก แต่ราคาแพง จะช้ากว่าวิธีการที่ใช้ในการตอบก่อนหน้า ( อย่างเห็นได้ชัดช้ากว่าบนเบราว์เซอร์บางส่วน) และมีผลกระทบต่อหน่วยความจำขนาดใหญ่มากเช่นกัน (jQuery มีการสร้างอาร์เรย์ของทั้งหมดของdivองค์ประกอบบนหน้าเว็บแล้วกลับไปและ วนรอบพวกเขาเพื่อดูว่าพวกเขามีคลาสนั้นหรือไม่
TJ Crowder

3
@tj hasClassเป็น 33% ได้เร็วขึ้นแล้วตัวเลือกอื่น ๆ ที่นี่ ตรวจสอบjsperf.com/hasclass00
Hussein

1
@ Hussein: เฉพาะกับกรณีทดสอบที่ไม่สมจริงอย่างสมบูรณ์ (สองdivองค์ประกอบ) ที่ด้านข้างเป็นปัญหาที่ฉันเน้น (การสร้างอาร์เรย์) ลองใช้กับ divs: jsperf.com/hasclass00/2มันช้าลง 63% สำหรับสำเนา Chrome ของฉัน, ช้าลง 43% สำหรับ Firefox ของฉัน, 98% (!) ช้าลงบน Opera แต่ยิ่งไปกว่านั้นมันทำให้รู้สึกว่าช้ากว่าในการสร้างรายชื่อ divs แล้วค้นหามันแทนที่จะให้ข้อมูลทั้งหมดที่ต้องการกับเอ็นจิ้นตัวเลือก
TJ Crowder

1
@Hussein: โปรดทราบว่าฉันได้รับการส่งมอบอย่างสม่ำเสมอและนำเสนอหลักฐานที่สมดุลต่อการเรียกร้องของคุณ ฉันขอโทษถ้าฉันได้สัมผัสประสาทที่ดูเหมือนจะเกิดขึ้นครั้งที่แล้วเช่นกัน เพียงแค่ผ่อนคลายมันไม่ใช่การดูถูกส่วนตัวมันเป็นการสนทนาทางเทคนิค ผิวหนาและใจที่เปิดกว้างมีประโยชน์ใน StackOverflow
TJ Crowder

1
@Hussein: ตัวเลือก CSS5 ของ HTML5 หมายความว่านี่จะเป็นวิธีที่แย่ที่สุดที่จะทำได้ -1 สำหรับการไม่เพียงลบโพสต์ของคุณ
Stefan Kendall

46

นี่คือทางออกโดยไม่ใช้ Jquery

var hasClass = element.classList.contains('class name to search');
// hasClass is boolean
if(hasClass === true)
{
     // Class exists
}

ลิงค์อ้างอิง


1
classList ได้รับการสนับสนุนใน IE10 +: caniuse.com/classlist คุณต้องเพิ่ม polyfill github.com/eligrey/classList.jsหรือเขียนวิธีการของคุณเอง
AFD


10

เพื่อทดสอบdivองค์ประกอบอย่างชัดเจน:

if( $('div.mydivclass').length ){...}


สิ่งนี้อาจช้ากว่า.mydivclassเบราว์เซอร์และรุ่น jQuery เล็กน้อย
Stefan Kendall

จริง แต่ OP ได้ระบุว่า"jQuery - ตรวจสอบว่าdiv ที่มีชื่อคลาสที่แน่นอนอยู่ " (เน้นของฉัน) ดังนั้นคุณจะได้รับการโหวตว่าเป็นคนแรกที่รวมdivส่วนของตัวเลือกจริงหรือไม่
TJ Crowder

7

รหัสง่าย ๆ ได้รับด้านล่าง:

if ($('.mydivclass').length > 0) {
   //Things to do if class exist
}

หากต้องการซ่อน div ด้วยฝุ่นละออง id:

if ($('#'+given_id+'.mydivclass').length > 0) {
   //Things to do if class exist
}

3

นี่คือวิธีการบางอย่าง:

1.  if($("div").hasClass("mydivclass")){
    //Your code

    //It returns true if any div has 'mydivclass' name. It is a based on the class name
    }

2. if($("#myid1").hasClass("mydivclass")){
    //Your code


    //  It returns true if specific div(myid1) has this class "mydivclass" name. 
    //  It is a  based on the specific div id's.
    }           
3. if($("div[class='mydivclass']").length > 0){
    //Your code

   // It returns all the divs whose class name is "mydivclass"
   //  and it's length would be greater than one.
    }

เราสามารถใช้วิธีใดวิธีหนึ่งที่กำหนดไว้ abobe ตามความต้องการ


2
if ($(".mydivclass").size()){
   // code here
}

size()วิธีการเพียงแค่ส่งกลับจำนวนขององค์ประกอบที่ jQuery เลือกตัวเลือก - mydivclassในกรณีนี้จำนวนขององค์ประกอบที่มีชั้นเรียน ถ้ามันคืนค่า 0 นิพจน์นั้นเป็นเท็จและดังนั้นจึงไม่มีและถ้ามันคืนค่าตัวเลขอื่น ๆ ต้องมี divs


1
ทำไมต้องเรียกเมธอดเมื่อมีlengthคุณสมบัติ? นอกจากนี้การตรวจสอบนี้ใด ๆdivองค์ประกอบกับการเรียนที่ไม่ได้เป็นเพียง (ตอนนี้อาจเป็นความหมายของ OP แม้ว่าจะไม่ใช่สิ่งที่เขา / เธอพูด) ดูคำตอบของ Stefan Kendallซึ่งทำในสิ่งที่ OP พูดจริง ๆ (แม้ว่าอีกครั้งพวกเขาอาจหมายถึงสิ่งที่คุณทำ)
TJ Crowder

1
@TJ Crowder: เอาละรสนิยมส่วนตัวจริงๆ - ฉันแค่รู้สึกถึงขนาด () วิธีการอยู่ที่นั่น - ทำไมไม่ใช้มัน ค่าใช้จ่ายพิเศษในการเรียกใช้ฟังก์ชั่น (ยกเว้นว่าคุณกำลังทำมัน 1,000 ครั้งในการวนซ้ำ) นั้นน้อยมากฉันควรจะดูรหัสที่ชัดเจน ในจุดที่สองของคุณ - ใช่ฉันเปลี่ยนคำตอบดั้งเดิมของฉันเพื่อลบdivส่วนด้วยเหตุผลสองประการ: 1) ตัวเลือกไม่ได้ถูกผูกไว้กับข้อเท็จจริงที่ว่า OP ใช้divองค์ประกอบ (อาจเปลี่ยนแปลงได้ในอนาคต) และ 2) ใน เบราว์เซอร์และรุ่นส่วนใหญ่ของ jQuery, AFAIK สิ่งนี้น่าจะเร็วกว่า
Herman Schaaf

"ฉันแค่รู้สึกว่าขนาด () วิธีการอยู่ที่นั่น - ทำไมไม่ใช้มัน"อืมโอเค lengthคุณสมบัติจะมีทำไมไม่ใช้มันได้หรือไม่ แต่ถ้าเป็นความชอบของคุณ ที่อื่นฉันไม่ทราบว่าคุณแก้ไขมันออกมา ถ้าฉันจะทำอย่างนั้นฉันจะทิ้งมันไว้ในนั้น (อีกครั้งเขาพูดว่า"... ถ้าdivกับ ... " (ความสำคัญของฉัน) แล้วพูดถึงเพิ่มเติมว่าถ้ามันไม่สำคัญว่ามันจะ เป็นdivหรือไม่คุณสามารถทิ้งส่วนนั้น แต่อะไรก็ได้ :-)
TJ Crowder

@TJ Crowder: ใช่ฉันคิดว่าเราคิดมากเรื่องนี้
Herman Schaaf

@TJ Crowder: แต่ในการป้องกันของฉันแม้ว่านี่ไม่ใช่สถานที่สำหรับการอภิปราย: ฉันรู้สึกว่ามีsize()วิธีการที่จะทำให้ชัดเจนว่าคุณกำลังนับจำนวนองค์ประกอบในตัวเลือก jQuery และไม่ใช่แค่อาร์เรย์เก่า ๆ แต่อีกครั้งนั่นเป็นเพียงการตั้งค่าของฉัน
Herman Schaaf

2

ตรวจสอบว่า div มีอยู่ในคลาสที่แน่นอนหรือไม่

if ($(".mydivclass").length > 0) //it exists 
{

}

2
if($(".myClass")[0] != undefined){
  // it exists
}else{
  // does not exist
}

2
ดูเหมือนว่าเกือบจะเหมือนกับคำตอบที่มีอยู่นี้
ปาง

ใช่มันเป็น ... แต่ฉันลองตอบดูแล้วก็ไม่ได้ผล เมื่อฉันเพิ่มการเปรียบเทียบกับ 'ไม่ได้กำหนด' ดูเหมือนว่าจะทำงานได้อย่างสมบูรณ์
บันได

2
var x = document.getElementsByClassName("class name");
if (x[0]) {
alert('has');
} else {
alert('no has');
}

ในขณะที่รหัสนี้อาจตอบคำถาม แต่มีบริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการที่รหัสนี้ตอบคำถามช่วยปรับปรุงมูลค่าระยะยาว
Vishal Chhodwani

2

ใน Jquery คุณสามารถใช้สิ่งนี้

if ($(".className")[0]){

   // Do something if class exists

} else {

// Do something if class does not exist

}

ด้วยจาวาสคริปต์

if (document.getElementsByClassName("className").length > 0) {

// Do something if class exists

}else{

    // Do something if class does not exist

}

2

นี่คือตัวอย่างโซลูชันสำหรับคลาสเช็ค (hasClass) ใน Javascript:

const mydivclass = document.querySelector('.mydivclass');
// if 'hasClass' is exist on 'mydivclass'
if(mydivclass.classList.contains('hasClass')) {
   // do something if 'hasClass' is exist.
}

1

วิธีที่ดีที่สุดใน Javascript:

if (document.getElementsByClassName("search-box").length > 0) {
// do something
}


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.