在这种情况下,为什么没有.not()工作?

时间:2016-10-10 23:22:43

标签: javascript jquery css web

我一直在拼命想弄清楚为什么.not()在这种情况下不起作用

link:http://jsfiddle.net/Kr8SA/4/

感谢您的帮助。



$('#site').not('#box')
  .fadeIn();

#site {
  display: none;
}
div {
  border: 2px solid black;
  width: 300px;
  height: 300px;
}
#box {
  background: gray;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="site">
  <div id="box"></div>
  <div></div>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:3)

.not函数不会在给定集的所有后代中进行搜索。它过滤集合中的元素。自$('#site').length == 1起,它就无效了。

两种选择

  • $('#site *').not('#box')
  • $('#site').find('*:not(#box)')

$('#site *').not('#box').fadeIn()
/* Hide the elements we'll fade in */
#site *{
  display: none;
}
div {
  border: 2px solid black;
  width: 300px;
  height: 300px;
}
#box {
  background: gray;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="site">
  <div id="box"></div>
  <div>Something to show</div>
</div>

答案 1 :(得分:0)

.not()用作当前查询结果的排除过滤器,而不是儿童或其他后代。您的查询仅包含#site。因此告诉jQuery使用#box排除.not()将不会做任何事情。

您的查询如下:

  • 包括#site,我们的查询结果仅包含#site现在
  • 排除#box,我们的查询不包含#box,所以不要做任何事情
  • 我们的最终查询结果仍然只包含#site