จะตรวจสอบได้อย่างไรว่าองค์ประกอบไม่มีคลาสเฉพาะหรือไม่?


232

ฉันจะตรวจสอบได้อย่างไรว่าไม่มีคลาส ตัวอย่างเช่นฉันรู้วิธีตรวจสอบเพื่อดูว่ามีคลาส "ทดสอบ" แต่ฉันจะตรวจสอบเพื่อดูว่าไม่มีคลาส "ทดสอบ" ได้อย่างไร

if($(this).hasClass("test")){
}

คำตอบ:


484
if (!$(this).hasClass("test")) {

34
ในหลอดเลือดดำ TIMTOWTDI นี่เป็นทางออกที่น่ากลัว: if($(this).is(":not(.test)"))> :)
Phrogz

6
TIMTOWTDIBSCINABTE
Fizzix

25
ในกรณีที่ทุกคนสงสัยว่า: มีมากกว่าหนึ่งวิธีที่จะทำ แต่บางครั้งความมั่นคงไม่ได้เป็นสิ่งที่ไม่ดีอย่างใดอย่างหนึ่ง
Captain Hypertext

145

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

// select all divs that don't have class test
$( 'div' ).not( ".test" );
$( 'div:not(.test)' );  // <-- alternative 

8
IMHO คำตอบของคุณดีที่สุด หากคำตอบของ sdleihssirhc นั้นถูกต้องกว่าคำถามนี้ไม่มีอะไรเกี่ยวข้องกับ jQuery และจะมีการกำหนดสูตรให้ดีขึ้นว่า 'มีเงื่อนไขบางประการฉันจะทดสอบได้อย่างไรว่าเงื่อนไขนั้นไม่เป็นความจริงใน Javascript' สิ่งที่เราต้องการด้วย jQuery นั้นทำงานบนคอลเล็กชั่นองค์ประกอบ DOM ทั้งหมดได้ง่ายอย่างที่เราทำได้บนวัตถุเดี่ยว คำตอบของคุณมีเพียงทางออกนั้น +1
Stijn de Witt

1
@byronyasgur ในบริบทของคำถามเดิมโปสเตอร์ต้องการทดสอบว่าองค์ประกอบที่รู้จักบางอย่างไม่มีคลาส รหัสนี้เลือกองค์ประกอบทั้งหมดที่ไม่มีคลาสดังนั้นมันจะไม่แก้ปัญหาของโปสเตอร์ ฉันจำไม่ได้ว่าทำไมฉันถึงโพสต์สิ่งนี้ตั้งแต่แรก
JJJ

14

เลือกองค์ประกอบ (หรือกลุ่มองค์ประกอบ) ที่มีคลาส "abc" ไม่มีคลาส "xyz":

    $('.abc:not(".xyz")')

เมื่อเลือก CSS .abc:not(.xyz)ปกติคุณสามารถใช้


6

ใช้วิธี. not () และตรวจสอบคุณสมบัติ:

$('p').not('[class]');

ตรวจสอบที่นี่: http://jsfiddle.net/AWb79/


8
นี่เป็นสิ่งที่ผิดอย่างสมบูรณ์ วงเล็บไม่ได้มีไว้สำหรับคลาส แต่ใช้สำหรับตัวเลือกการระบุคุณสมบัติ
Misterparker

1
อันที่จริงมันถูกต้องสมบูรณ์ '[คลาส]' ถูกต้องระบุแอตทริบิวต์ของ (ไม่) มีคลาส
เดโบราห์

คลาส @Misterparker เป็นคุณลักษณะ
Matthew Cira

สิ่งนี้จะตรวจสอบว่ามีแอตทริบิวต์หรือไม่ถ้าองค์ประกอบมีคลาสเฉพาะเช่นเดียวกับในค่าของคลาส
Mark

6

คุณสามารถลองสิ่งนี้:

<div id="div1" class="myClass">there is a class</div>
<div id="div2"> there is no class2 </div>

$(document).ready(function(){
    $("#div2").not('.myClass');  // do not have `myClass` class.
});

คำตอบนี้ไม่ได้เพิ่มคุณค่าใด ๆ ให้กับหน้านี้ แต่ถูกโพสต์เมื่อ 7 ปีที่แล้ว โปรดอย่าโพสต์เนื้อหาที่มีรหัสซ้ำและซ้ำซ้อนเท่านั้น
mickmackusa

0

มีสถานการณ์ที่ซับซ้อนมากขึ้นซึ่งสิ่งนี้ไม่ทำงาน จะเป็นอย่างไรถ้าคุณต้องการเลือกองค์ประกอบที่มีคลาส A ที่ไม่มีองค์ประกอบที่มีคลาส B คุณต้องมีอะไรเพิ่มเติม:

หากองค์ประกอบหลักไม่มีองค์ประกอบลูกที่แน่นอน jQuery


0

อ่านผ่าน 6 ปีนี้ในภายหลังและคิดว่าฉันจะแฮ็กมันเช่นกันในTIMTOWTDI vein ... : D หวังว่ามันจะไม่ถูกต้อง 'JS มารยาท'

ฉันมักจะตั้งค่า var ที่มีเงื่อนไขและจากนั้นอ้างอิงในภายหลังใน .. eie;

// var set up globally OR locally depending on your requirements
var hC;

function(el) {
  var $this = el;
  hC = $this.hasClass("test");

  // use the variable in the conditional statement
  if (!hC) {
    //
  }
}

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

hC ? '' : foo(x, n) ;
   // OR -----------
!hC ? foo(x, n) : '' ;

... แทนสิ่งนี้:

$this.hasClass("test") ? '' : foo(x, n) ;
   // OR -----------
(!$this.hasClass("test")) ? foo(x, n) : '' ;

0

ฉันไม่รู้ว่าทำไม แต่คำตอบที่ยอมรับนั้นใช้ไม่ได้สำหรับฉัน สิ่งนี้ใช้ได้ผล:

if ($(this).hasClass("test") !== false) {}

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