jQuery щелкните внешний тег

#jquery

#jquery

Вопрос:

У меня есть html, например

 <body><div id="main"><p>some text</p></div></div></div></body>
  

Как сделать в jquery, когда вы нажимаете вне #main, но внутри тела тега какое-то действие?

 $(":not(#main)").click({..});
  

не работает

Ответ №1:

Вы пробовали это:

     $("body").children().filter(":not(#main)").click(function(){...});
  

Комментарии:

1. Это намного лучше (чище и лаконичнее), чем мое собственное предложение … 1! =)

2. Также можно написать в одной строке $(«body>:not(#main)»).click(function(){…});

Ответ №2:

 $('body').click(function(e){
  //if click inside #main
  if($(e.target).parents('#main').length || $(e.target).is('#main')){
  ...
  }
  else{
    //if not clicked inside #main
  }

})
  

проверьте здесь http://jsfiddle.net/gwams/1 /

Ответ №3:

Я бы предложил что-то вроде:

 $('body').click(
    function(e){
        if ($(e.target).is('#main') || $(e.target).closest('#main').length){
            // main was clicked
        }
        else {
            // something else was clicked
        }
    });
  

Демонстрация скрипки JS.

Ответ №4:

Сначала вы должны изменить Html на:

 <body><div id="main"><p>some text</p></div></body>
  

В нем есть два незакрытых тега div, и тогда ответ Дэвида должен сработать.

Ответ №5:

 $('body').click(function(e) {
    if (e.target.id != 'main') {
        console.log('outside main but within body');
    } else {
        console.log('within main');
    }
});
  

Ответ №6:

 $('body').click(function () {
   alert('clicked');
});

$('#main').click(function (event) {
   event.stopPropagation();
});
  

Должен остановить щелчки внутри #main , чтобы распространяться вниз body .

Ответ №7:

Попробуйте $("body>:not(#main)").click(function(){...});

Изменено из samn

Если вам нужна живая версия, просто измените на

$("body>:not(#main)").live("click", function(){...});