Селектор jQuery с исключением дочерних элементов и элементов - PullRequest
4 голосов
/ 24 февраля 2010

У меня есть div, используемый для фильтрации, и я хочу, чтобы он закрывался при нажатии на что-либо вне div.Селектор, который я пытаюсь создать, в основном выбирает все элементы, кроме определенного элемента, и исключает его дочерние элементы.Вот то, что я пробовал, но не смог заставить работать

$('*:not(:has(.exclude *))').live('click', function() {HideFilter();});

Структура страницы упрощена до этого:

<div></div>
<div>
 <div></div>
 <div>
  <div class="exclude"><inputs></div>
 </div>
 <div></div>
</div>

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

Ответы [ 2 ]

4 голосов
/ 24 февраля 2010

Вы пробовали

$('*:not(.exclude, .exclude *)').live( ... )

? [править [Ах, я вижу - проблема в том, что даже если вы исключите материал, события все равно будут всплывать.

Попробуйте что-то вроде этого:

$('*').live('click', function(e) {
  if (!$(e.target).is('.exclude, .exclude *'))
    // do interesting stuff
  }
  return false;
});

Это должно остановить распространение событий на исключенные вещи, фактически ничего не делая.

Пример страницы: http://gutfullofbeer.net/balloon.html

edit update, 3 года спустя: метод .live() на данный момент давно устарел. Последний пример должен выглядеть следующим образом в новом коде:

$('body').on('click', '*', function(e) {
  if (!$(e.target).closest('.exclude').length) {
    // do interesting stuff
  }
  return false;
});
0 голосов
/ 24 февраля 2010

как насчет немного другой стратегии:

закройте все, когда нажмете что-нибудь кроме div:

$("body").click(function(e){
  if($(e.target).hasClass("exclude")){
    //show stuff
  } else {
    //hide stuff
  }
});

что-то в этом роде

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