Javascript 我想隐藏我的div,如果我点击它之外的任何地方,我该如何在jQuery中实现它?这个解决办法让我很困惑

Javascript 我想隐藏我的div,如果我点击它之外的任何地方,我该如何在jQuery中实现它?这个解决办法让我很困惑,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我很想使用它,因为它似乎有很好的评论,但我不确定它到底是做什么的。有人能解释一下吗?我知道.has()返回具有给定子元素的元素,但函数如何处理该子元素?请查看以下代码: if ($(".myClass").length === 0){ //Do stuff } 这将检查返回的jQuery对象是否包含任何元素.length将返回元素数。因此,如果对象为空或非空,检查长度是否等于0将为我们提供一个布尔值 类似地,您可以执行以下操作来执行相反的操作 if ($(".myClass").lengt

我很想使用它,因为它似乎有很好的评论,但我不确定它到底是做什么的。有人能解释一下吗?我知道
.has()
返回具有给定子元素的元素,但函数如何处理该子元素?

请查看以下代码:

if ($(".myClass").length === 0){
  //Do stuff
}
这将检查返回的jQuery对象是否包含任何元素
.length
将返回元素数。因此,如果对象为空或非空,检查长度是否等于0将为我们提供一个布尔值

类似地,您可以执行以下操作来执行相反的操作

if ($(".myClass").length > 0){
  //Do stuff
}
此外,由于大于0的数字将计算为
true
,0将计算为
false
,因此您可以将其简化为:

if ($(".myClass").length){
  //Contains elements
}else{
  //No elements
}
这是另一个问题中的代码:

$(document).mouseup(function (e)
{
    var container = $("YOUR CONTAINER SELECTOR");

    if (container.has(e.target).length === 0)
    {
        container.hide();
    }
});
您需要知道的第一件事是浏览器中的事件是如何工作的。在大多数情况下,它们从最初触发事件的元素“冒泡”到文档本身,一直到它的祖先元素;这个过程称为事件传播

因此,如果您有以下HTML:

<body>
    <div>
        <a href="#">Click me!</a>
    </div>
</body>

然后单击
元素,事件将由该
元素触发,但气泡会进入
,然后进入
,然后进入

如果将事件处理程序绑定到
文档
,那么单击锚定仍将触发该事件处理程序函数,因为事件会冒泡并最终由文档处理。这是上述代码的基本原则

现在,让我们看看实际的事件处理函数。您只有一个参数,
e
,它就是事件本身。该对象有一个属性,
target
,即最初触发事件的元素

回到我们简单的HTML示例,如果您单击
元素,那么
e.target
将成为锚定,即使事件是在文档级别处理的。这与jQuery事件处理函数中的
This
不同,jQuery事件处理函数将是处理事件的元素(在本例中为
document

第一行非常直截了当——它只选择了要忽略的元素

if
语句有点棘手,但本质上是说“如果最初触发此事件的元素不是容器的后代,请隐藏容器”

container.has(e.target)
部分正在检查“触发容器内事件的元素是什么?”。如果答案是“是”,那么
length
属性将大于
0
(准确地说,它将是
1
,因为我们从一个包含单个元素的jQuery对象开始)


如果答案为“否”,则
length
属性将等于
0
。因为这是我们实际想要检查的,所以我们将
length
属性与
if
条件中的
0
进行比较。

非常、非常彻底和奇妙的答案。非常感谢你。