单击除特定div之外的正文

qad*_*nza 6 jquery

我想点击一下body,除了menutop里面的东西body.

<body>
<div id="menutop">lorem ipsum...</div>
...
</body>
Run Code Online (Sandbox Code Playgroud)

JS

$("body").not($("#menutop")).click(function(){
    console.log("323");
});
Run Code Online (Sandbox Code Playgroud)

也试过了

var n = $("#menutop");
$("body:not(n)").click(function(){
    console.log("323");
});
Run Code Online (Sandbox Code Playgroud)

menutop在两种情况下点击控制台显示323

Jos*_*ier 18

如果元素不是元素,则选择器$("body").not($("#menutop"))将选择元素.由于元素显然不是元素,因此仍然选择元素并将click事件附加到该元素.body#menutopbody#menutopbody

即使您单击该#menutop元素,click事件仍会冒泡并触发body元素上的click事件,因此一个选项是检查是否event.target#menutop元素:

$(document).on('click', function (event) {
  if (!$(event.target).closest('#menutop').length) {
    // ... clicked on the 'body', but not inside of #menutop
  }
});
Run Code Online (Sandbox Code Playgroud)

或者,您也可以在单击元素时抑制事件冒泡并停止事件传播#menutop:

$(document).on('click', function (event) {
  // ... clicked on the 'body', but not inside of #menutop
});
$('#menutop').on('click', function (event) {
  event.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)

  • 完善。节省了我数小时的时间。谢谢。 (2认同)

小智 5

您可以event.stopPropagation()在menutop元素上使用,以防止点击进入下面的身体.

请参阅此codepen以获取解决方案

JS

$("body").click(function(){
    alert("323");
});

$("#menutop").click(function(event) {
    event.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)