javascript - 如何使用 .not() 隐藏除被单击的 div 之外的所有 div

标签 javascript jquery html css

我正在尝试放大一组在 div 内有缩略图的图像。

当我单击应用于图像的 .thumbnail 类时,图像会放大,但我希望所有其他产品都消失。

我尝试添加一个带有 display: none 的类,但是因为传递给函数的图像位于 div 内部,所以它仍然没有显示(我认为这就是原因),所以我尝试使用不透明度,但没有成功。我将在下面添加相关代码。

任何帮助将不胜感激,谢谢。

$(document).ready(function() {
  var images = document.querySelectorAll('.thumbnail');


  images.forEach(function(image) {
    image.addEventListener('click', enlarge);
  });

  function enlarge(e) {
    var image = e.target,
      interval,
      height = 200,
      width = 200,
      z = $(this).css("z-index"); //Obtain the current z-index of the image which has been clicked
    /*thisProduct = */

    $(this).css("z-index", z + 10); //increase the z-index of just the image which has been selected by 10
    $('#product-container').addClass('disable-click'); //Stops other products from being enlarged whilst another is
    $('.unhidden').not($(this)).addClass('noOpacity');

  }

});
.noOpacity {
  opacity: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="product-container">
  <div class="product-wrapper">
    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/home-bg.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Mexican Nachos - £6.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/enchilada.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Enchiladas - £10.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/quesadilla.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Quesadilla - £10.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/shrimp.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Shrimp Stir Fry - £10.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/tacos.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Tacos - £5.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/tortilla.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Tortillas - £7.99
      </div>
    </div>
  </div>
</div>
<!-- Product container -->

最佳答案

您已使用 .thumbnail 元素附加事件处理程序,而不是 .unhidden,因此您需要使用 .closest()/来定位父元素.parents() 然后可以使用 not() 。所以使用

$('.unhidden').not($(this).closest('.unhidden')).addClass('noOpacity');

而不是

$('.unhidden').not($(this)).addClass('noOpacity');

$(document).ready(function() {
  var images = document.querySelectorAll('.thumbnail');


  images.forEach(function(image) {
    image.addEventListener('click', enlarge);
  });

  function enlarge(e) {
    var image = e.target,
      interval,
      height = 200,
      width = 200,
      z = $(this).css("z-index"); //Obtain the current z-index of the image which has been clicked
    /*thisProduct = */

    $(this).css("z-index", z + 10); //increase the z-index of just the image which has been selected by 10
    $('#product-container').addClass('disable-click'); //Stops other products from being enlarged whilst another is
    $('.unhidden').not($(this).closest('.unhidden')).addClass('noOpacity');

  }

});
.noOpacity {
  opacity: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="product-container">
  <div class="product-wrapper">
    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/home-bg.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Mexican Nachos - £6.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/enchilada.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Enchiladas - £10.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/quesadilla.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Quesadilla - £10.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/shrimp.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Shrimp Stir Fry - £10.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/tacos.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Tacos - £5.99
      </div>
    </div>

    <div id="product" class="unhidden">
      <div class="image-container">
        <img src="assets/tortilla.jpg" class="thumbnail">
      </div>
      <div class="product-text">
        Tortillas - £7.99
      </div>
    </div>
  </div>
</div>
<!-- Product container -->

关于javascript - 如何使用 .not() 隐藏除被单击的 div 之外的所有 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42981909/

相关文章:

javascript - 当浏览器大小改变时改变背景视频的大小

javascript - 追加元素后,事件单击对 jQuery 中的追加元素不起作用

html - 在 Bootstrap 面板内的同一行对齐两个图像和标题

javascript - 悬停时在后台移动节点

javascript - 如何将数组从 html 发送到 node.js,然后再发送到 mongodb?

javascript - 将 JQuery 插件添加到 typescript

javascript - 在 Twitter Bootstrap 中创建 custom.css

javascript - 使用 CSS 或 JavaScript 从原色动态获取强调色

javascript - Fancybox 不尊重高度

html - 调整大小时保持文本居中