جافاسكريبت - كيفية اختيار عنصر لا يحتوي على صنف معين


أتساءل عن كيفية اختيار عنصر لا يحتوي على فئة معينة باستخدام JavaScript، وليس jQuery.

على سبيل المثال، لدي هذه القائمة:

<ul id="tasks">
  <li class="completed selected">One Task</li>
  <li>Two Task</li>
</ul>

وأنا أختار المهمة المكتملة عن طريق:

var completeTask = document.querySelector("li.completed.selected");

لكن بعد ذلك لست متأكدًا من كيفية اختيار عنصر القائمة الذي لا يحتوي على تلك الفئات.

الإجابة رقم 1

هذا يختار العنصر LI الثاني.

document.querySelector("li:not([class])")

أو

document.querySelector("li:not(.completed):not(.selected)")

مثال:

// select li which doesn't have a 'class' attribute...
console.log(document.querySelector("li:not([class])"))

// select li which doesn't have a '.completed' and a '.selected' class...
console.log(document.querySelector("li:not(.completed):not(.selected)"))
 <ul id="tasks">
    <li class="completed selected">One Task</li>
    <li>Two Task</li>
  </ul>

الإجابة رقم 2

لتحديد <li> الذي لا يملك تصنيف completed ولا selected:

document.querySelector("li:not(.completed):not(.selected)");

كمان

http://jsfiddle.net/Z8djF/

الإجابة رقم 3

يمكنك تجربة المحدد :not()

var completeTask = document.querySelector("li:not(.completed):not(.selected)");

http://jsfiddle.net/UM3j5/

الإجابة رقم 4

يقبل محدد :not(*selector*) أيضًا الفواصل (وكذلك querySelectorAll()) https://developer.mozilla.org/en-US/docs/Web/CSS/:not#syntax:

let plainElements = document.querySelectorAll( ':not( .completed, .in-progress ) ');
plainElements.forEach( ( item ) => { item.style.color = 'red'; } );
li { color: green; }
<ul id="tasks">
  <li class="completed selected">Task 1</li>
  <li>Task 2</li>
  <li class="in-progress">Task 3</li>
</ul>