JQuery получить все div, которые не имеют атрибута класса - PullRequest
69 голосов
/ 26 декабря 2009

получить все div, которые имеют атрибут класса

$('div[class]')

получить все div, которые не имеют атрибута класса

$('div[class!=""]')

Этот код работает, но я не понимаю, почему он работает. Если приведенный выше код работает, тогда код для всех элементов div с атрибутом class должен быть

$('div[class=""]') 

, который не дает никакого результата.

Ответы [ 4 ]

137 голосов
/ 26 декабря 2009

Попробуйте с помощью селектора псевдокласса :not() :

$('div:not([class])')

Редактировать

Описание для jQuery селекторов скажем:

  • [attribute]
    Соответствует элементам с указанным атрибутом.
  • [attribute=value]
    Сопоставляет элементы с указанным атрибутом с определенным значением.
  • [attribute!=value]
    Соответствует элементам, которые не имеют указанного атрибута или имеют указанный атрибут, но не имеют определенного значения.

Это означает, что div[class=""] выберет все элементы DIV с атрибутом class, указанным с пустым значением.

Но последний селектор является проприетарным селектором jQuery, а не CSS-селектором . Вам нужно будет использовать :not(), чтобы выбрать все элементы DIV, которые не имеют класса:

div:not([class])
21 голосов
/ 26 декабря 2009

Важно понимать, что существуют пустые атрибуты класса, а также элементы без атрибута класса, но для их выбора требуются разные тесты.

Есть ряд тестов, которые делают разные вещи. Вот наш HTML для наших тестов:

<div class="">Empty Class Attribute </div>
<div class="column">Full Class Attribute </div>
<div>No Class Attribute </div>

Теперь давайте запустим наши тесты (первая часть - просто строка, которая помогает нам узнать, что только что было вызвано в предупреждении, в противном случае это бессмысленно) :

$(document).ready(function(e){
  // Outputs "Empty Class Attribute Full Class Attribute"
  alert( "div[class] : "     + $('div[class]').text()     );

  // Outputs "Full Class Attribute"
  alert( "div[class!=''] : " + $('div[class!=""]').text() );

  // Outputs "Empty Class Attribute" 
  alert( "div[class=''] : "  + $('div[class=""]').text()  );

  // Outputs "No class Attribute"
  alert( "div:not([class]) : " + $('div:not([class])').text()     );
});

Вы можете просмотреть этот код в своем браузере, посетив здесь: http://jsbin.com/ijupu

Теперь, вооружившись этими знаниями, если вы хотите выбрать каждый элемент div на странице с пустым атрибутом и без атрибута, используйте следующий селектор:

$("div[class=''], div:not([class])");
4 голосов
/ 26 декабря 2009

Селектор $('div[class=""]') по существу читает: "Получить все элементы div, у атрибута класса которых в качестве значения есть пустая строка." - Это исключает все элементы div, которые имеют ЛЮБОЕ значение в атрибуте класса, другие чем пустая строка, и все элементы div, у которых вообще не установлен атрибут class.

0 голосов
/ 05 февраля 2013

1001 * попробовать *

jQuery('div[class^=""]')

или

$('div[class^=""]')

это значит получить все div, у которых есть класс с любыми именами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...