特定のクラスを持たない要素を選択する方法


94

jQueryではなくJavaScriptを使用して、特定のクラスを持たない要素を選択する方法を知りたいです。

たとえば、私はこのリストを持っています:

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

完了したタスクを次の方法で選択します。

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

しかし、それらのクラスを持たないリストアイテムを選択する方法がわかりません。

回答:


171

これにより、2番目の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>


17

クラスも<li>持っていないcompletedものを選択するにはselected

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

フィドル

http://jsfiddle.net/Z8djF/


逆の方法:つまり、completedselectedクラスの両方を持つすべての要素を選択しますか?
user2284570 2016年

@ user2284570空白なしで両方のクラスを書き込むだけです:li.completed.selected->これはANDクラスliを持つすべての要素に一致しますcompletedselected
BeNdErR 2016年


2
document.querySelectorAll('[wf-body=details] input:not(.switch):not(.btn)').forEach(function(e){
    // do whatever you want. with 'e' as element :P
});

1

代わりに、親の子の配列を取得してみてください。

var completeTask = document.querySelector("#tasks").childNodes;

次に、必要に応じてそれらをループ/検索します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.