在 jQuery 中使用循环的选择器问题

Posted

技术标签:

【中文标题】在 jQuery 中使用循环的选择器问题【英文标题】:Selector issue using a loop in jQuery 【发布时间】:2021-02-13 17:13:39 【问题描述】:

在我的 jQuery 代码(见下文)中,我无法更改“typetravaux”类内容的颜色。 悬停时的不透明度变化正常,但颜色变化不起作用(我尝试了 2 种不同的方法,但都不起作用)。

你们能告诉我我做错了什么吗?谢谢!

CSS:

.typetravaux 
  width: 100%;
  color: #ffffff;

HTML:

<div class="solutions">
    <div class="bloc1">
      <span class="typetravaux">PLOMBERIE</span>
       <div class="picture"><img src="img/plomberie.png" class="prestapicture"></div>
     </div>
    <div class="bloc2">
      <span class="typetravaux">CHAUFFAGE</span>
       <div class="picture"><img src="img/chauffage.jpg" class="prestapicture"></div>
     </div>
    <div class="bloc3">
      <span class="typetravaux">CLIMATISATION</span>
       <div class="picture"><img src="img/climatisation.jpg" class="prestapicture"></div>
     </div>
</div>

jQuery :

$prestapicture = $('.prestapicture');

for (y=0; y < $prestapicture.length; y++) 
    $prestapicture.eq(y).on("mouseover", function() 
      $(this).css("opacity", "0.3");
      $(this).prev(".typetravaux").css("color","black") // **does not work**
    
    )
    
    $prestapicture.eq(y).on("mouseout", function() 
      $(this).css("opacity", "1");
      $(".typetravaux").eq(y).css("color","white"); //**does not work either**
    
    )

【问题讨论】:

【参考方案1】:

prev 使用之前的 sibling,但 .typetravaux 元素不是 .prestapicture 元素的兄弟姐妹,它们是这些元素的父元素 .picture 元素的兄弟姐妹。

可以这样解决:

$(this).parent().prev(".typetravaux").css("color","black");
//      ^^^^^^^^^

...但它非常脆弱,对 html 的微小更改会破坏它。

相反,我会:

    向容器 div 中添加一个类并执行以下操作:

    $(this).closest(".container").find(".typetravaux").css("color","black");
    

    当您需要这种不同的样式时,向该容器添加一个类,并在 CSS 中使用后代组合符(空格)来进行 CSS 更改。

    .pic-hovered .typetravaux 
        color: black;
    
    

一般来说,我会避免使用css() 进行样式设置。使用类,并将样式规则放入您的 CSS。

【讨论】:

以上是关于在 jQuery 中使用循环的选择器问题的主要内容,如果未能解决你的问题,请参考以下文章

jquery标签选择器怎么循环

jQuery选择器之类选择器

jQuery性能

Django循环上的Jquery选择器

在 jQuery each() 中显示一个唯一的选择器

在 IE 8 中加速 ":not" jQuery CSS 选择器?