JQuery селектор не исключая: не

0

Я пытаюсь использовать селектор jquery

"body *:not(.class)" 

для привязки событий ко всему на странице, кроме данного класса (см. http://jsfiddle.net/MMrRb/)

Когда я это делаю, предложение: not игнорируется. Кто-нибудь знает, почему это? Мой единственный способ взломать это - отдельная статья jquery, чтобы отменить то, что применяется "*",

Теги:

2 ответа

0
Лучший ответ

Это связано с тем, что стиль применяется и к элементу ul, и two являются дочерними элементами ul поэтому правило css наследуется элементом

Мое решение будет заключаться в том, чтобы применить правило только к узлам листа, попробуйте решение ниже

$(function() {
    $("body :not(.two):not(:has(*))").css("color", "red");
});

Демо: скрипка

Примечание. Это будет невероятно дорогостоящим... поэтому, если вы получите какое-либо другое решение, выберите его после анализа затрат

  • 0
    Как общее решение, единственная проблема, с которой я сталкиваюсь, это элементы, которые содержат текстовые узлы, а также другие элементы. Текстовые узлы не будут затронуты. jsfiddle.net/QVW7u/2
  • 0
    @JamesMontagne пропустил это ... :)
5

Он работает отлично. Если вы проверите DOM в своей скрипке, вы увидите, что ваш .two элемент не имеет стиля color: red. Однако ваша ul. Так как ваш .two находится в вашей ul он наследует цвет.

При этом * в вашем селекторе не используется. Вы можете удалить его, и он по-прежнему будет выбирать одни и те же элементы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню