如何从基于 class 的组选择中定位特定的、当前活动的元素

How to target a specific, currently active, element out of a group selection based on class

我正在努力学习 jQuery,我阅读的所有内容都非常有道理,但后来我尝试做一些简单的事情,但失败了。好的,我有一个基本的图片库,四行四列,我希望能够在他们将光标移到图片上时换出 CSS classes。下面是我试图定位的相关 HTML(如果需要,我可以把整个文件文档放上去,它太长了): 具体来说,我想 select 所有带有 [=23 的图像=] galImg 并附加一个悬停事件处理程序,我想从该处理程序换出 CSS classes。这是我为此使用的 jQuery:

$(document).ready(function(){
$(".galImg").hover(function(){
    $(this, 'img').removeClass(".img-thumbnail");
    $(this,'img').removeClass(".galImg").addClass(".pictureFocus");
         });
});

我知道我可以通过从 HTML 文档中的每个图像条目中粘贴一堆 onClick="functionName()" 来调用事件处理程序,但这似乎是多余的,所以我正在建模我在另一个 post 上看到的与这个非常相似。据我所知(我可能看不到),问题出在哪里,一旦我有了 selection ,我就很难理解如何指定特定的元素鼠标悬停在上面。如果 $(".galImg").hover 是 selection,(我认为是 'all images with class .galImg that are placed in a hover state'),那么在附加到它的函数中,我将如何引用特定的用户将鼠标悬停在 img 上?我真的很感激任何人愿意帮助我。这是我第一天真诚地尝试使用我在 JavaScript 中阅读的内容做任何事情,我感到非常沮丧。再次感谢您的宝贵时间。

<div class="row coniferGal">
            <div class="col-lg-3">
                <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
                
            </div>
            <div class="col-lg-3">
                <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
                
            </div>
            <div class="col-lg-3">
                <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
                
            </div>
            <div class="col-lg-3">
                <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">

您的代码中存在一些问题。主要的是 jQuery 对象中的第二个参数是上下文。这实际上与 find() 相同。因此,您要在 this 中包含的 img 中寻找 img - 这就是它不起作用的原因。删除第二个参数。

其次,不要从元素中删除 .galImg class。你 select 编辑了 img。如果您希望它对您 select 的元素产生影响,那么您需要一个委托事件处理程序,但我不会在这里深入讨论,因为没有必要删除 .galImg class一审。

第三,addClass()removeClass()toggleClass()等方法不需要classes上的.前缀。您只需将它们作为字符串提供,必要时用空格分隔。

最后,您可以单独使用 toggleClass() 组合单独的 addClass()removeClass() 调用。

为了将来参考,您应该注意 jQuery 有 excellent documentation。我建议浏览它以熟悉可用的方法 - 其中大部分都是不言自明的。

综上所述试试这个:

$(document).ready(function() {
  $(".galImg").hover(function() {
    $(this).toggleClass("img-thumbnail pictureFocus");
  });
});
.galImg { 
  width: 75px;
  height: 75px;
  border: 1px solid #000;
  display: block;
}

.pictureFocus {
  background-color: #CCC;
  border-color: #C00;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row coniferGal">
  <div class="col-lg-3">
    <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
  </div>
  <div class="col-lg-3">
    <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
  </div>
  <div class="col-lg-3">
    <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
  </div>
  <div class="col-lg-3">
    <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
  </div>
</div>

但是 值得注意的是,JS/jQuery 对于您显示的示例不是必需的。在这种情况下更好的做法是单独使用 CSS 来更新元素的悬停状态。这是因为 CSS 的性能比 JS 好得多,也因为 JS 不应该单独用于更新 UI,在可能的情况下。

这是与上面相同的演示,但仅使用 CSS 构建:

.galImg { 
  width: 75px;
  height: 75px;
  border: 1px solid #000;
  display: block;
}

.galImg:hover {
  background-color: #CCC;
  border-color: #C00;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row coniferGal">
  <div class="col-lg-3">
    <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
  </div>
  <div class="col-lg-3">
    <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
  </div>
  <div class="col-lg-3">
    <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
  </div>
  <div class="col-lg-3">
    <img src="images/images/Gallery_03.jpg" alt="Chinese Maple" class="galImg img-thumbnail">
  </div>
</div>