鼠标/悬停在图像上更改父图像 src
Mouse / Hover over image change parent image src
我有以下问题,假设这是我的 html
<ul classname='products'>
<li classname='product'>
<div classname='product_title'>Product 1</div>
<div classname='product_thumbnail'><img src="product1.jpg"></div>
<div classname='product_images'>
<img src="product1_image1.jpg">
<img src="product1_image2.jpg">
</div>
</li>
<li classname='product'>
<div classname='product_title'>Product 2</div>
<div classname='product_thumbnail'><img src="product2.jpg"></div>
<div classname='product_images'>
<img src="product2_image1.jpg">
<img src="product2_image2.jpg">
</div>
</li>
<li classname='product'>
<div classname='product_title'>Product 3</div>
<div classname='product_thumbnail'><img src="product2.jpg"></div>
<div classname='product_images'>
<img src="product3_image1.jpg">
<img src="product3_image2.jpg">
</div>
</li>
</ul>
当我将鼠标悬停在 product_image 上时,我想将 product_thumbnail 源更改为 product_image 源。当我有一个列表项 product_thumbnail 的 ID
时,这并不难
那我本可以做到的
var $mainImage = $('#product_thumbnail'),
originalImageSrc = $mainImage.attr('src');
$('.product_images img')
.on('mouseover', function() {
var newImageSrc = $(this).attr('src');
$mainImage.attr('src', newImageSrc);
})
.on('mouseout', function() {
$mainImage.attr('src', originalImageSrc);
});
工作示例:JSFiddle
很遗憾,我没有一个带有 ID 的列表项。
当然,当我用 类 和上面的 html 尝试这段代码时,它总是会给我第一个列表的第一个 product_thumbnail div 中第一个图像的 src项目。
我希望你们理解我的问题,并且有人可以帮助我解决 jQuery 示例代码的 类 版本。
提前致谢
首先 html 需要修复 - 将 className 替换为 class。 ClassName 是 HTML class 的 JavaScript 属性名称。对于 HTML 只需使用 class='foo'.
<ul class='products'>
<li class='product'>
<div class='product_title'>Product 1</div>
<div class='product_thumbnail'><img src="product1.jpg"/></div>
<div class='product_images'>
<img src="product1_image1.jpg">
<img src="product1_image2.jpg">
</div>
</li>
<li class='product'>
<div class='product_title'>Product 2</div>
<div class='product_thumbnail'><img src="product2.jpg"/></div>
<div class='product_images'>
<img src="product2_image1.jpg">
<img src="product2_image2.jpg">
<img src="product2_image3.jpg">
</div>
</li>
</ul>
现在 JS 看起来像这样:
$('.product_images img')
.on('mouseover', function() {
var tgt = $(this).closest(".product").find(".product_thumbnail img")
tgt.data("orig_src", tgt.prop("src"))
tgt.prop("src", $(this).prop("src"));
})
.on('mouseout', function() {
var tgt = $(this).closest(".product").find(".product_thumbnail img")
tgt.prop("src", tgt.data("orig_src"));
});
魔法就在选择器中。 closest 从起始元素开始查找 DOM 。我们寻找最接近 class=product 的元素。当我们找到它时,我们用 class=product_thumbnail 寻找它的子图像,然后是它的子图像。这一切都假设只有一次出现,如果有多次点击,此代码将有所不同。
找到目标后,我们首先将其原始 src 值存储在其数据集合中,然后将 src 值替换为触发 img src。
在鼠标移出时,我们取出存储在缩略图数据中的 src 并替换它。
我有以下问题,假设这是我的 html
<ul classname='products'>
<li classname='product'>
<div classname='product_title'>Product 1</div>
<div classname='product_thumbnail'><img src="product1.jpg"></div>
<div classname='product_images'>
<img src="product1_image1.jpg">
<img src="product1_image2.jpg">
</div>
</li>
<li classname='product'>
<div classname='product_title'>Product 2</div>
<div classname='product_thumbnail'><img src="product2.jpg"></div>
<div classname='product_images'>
<img src="product2_image1.jpg">
<img src="product2_image2.jpg">
</div>
</li>
<li classname='product'>
<div classname='product_title'>Product 3</div>
<div classname='product_thumbnail'><img src="product2.jpg"></div>
<div classname='product_images'>
<img src="product3_image1.jpg">
<img src="product3_image2.jpg">
</div>
</li>
</ul>
当我将鼠标悬停在 product_image 上时,我想将 product_thumbnail 源更改为 product_image 源。当我有一个列表项 product_thumbnail 的 ID
时,这并不难那我本可以做到的
var $mainImage = $('#product_thumbnail'),
originalImageSrc = $mainImage.attr('src');
$('.product_images img')
.on('mouseover', function() {
var newImageSrc = $(this).attr('src');
$mainImage.attr('src', newImageSrc);
})
.on('mouseout', function() {
$mainImage.attr('src', originalImageSrc);
});
工作示例:JSFiddle
很遗憾,我没有一个带有 ID 的列表项。 当然,当我用 类 和上面的 html 尝试这段代码时,它总是会给我第一个列表的第一个 product_thumbnail div 中第一个图像的 src项目。
我希望你们理解我的问题,并且有人可以帮助我解决 jQuery 示例代码的 类 版本。
提前致谢
首先 html 需要修复 - 将 className 替换为 class。 ClassName 是 HTML class 的 JavaScript 属性名称。对于 HTML 只需使用 class='foo'.
<ul class='products'>
<li class='product'>
<div class='product_title'>Product 1</div>
<div class='product_thumbnail'><img src="product1.jpg"/></div>
<div class='product_images'>
<img src="product1_image1.jpg">
<img src="product1_image2.jpg">
</div>
</li>
<li class='product'>
<div class='product_title'>Product 2</div>
<div class='product_thumbnail'><img src="product2.jpg"/></div>
<div class='product_images'>
<img src="product2_image1.jpg">
<img src="product2_image2.jpg">
<img src="product2_image3.jpg">
</div>
</li>
</ul>
现在 JS 看起来像这样:
$('.product_images img')
.on('mouseover', function() {
var tgt = $(this).closest(".product").find(".product_thumbnail img")
tgt.data("orig_src", tgt.prop("src"))
tgt.prop("src", $(this).prop("src"));
})
.on('mouseout', function() {
var tgt = $(this).closest(".product").find(".product_thumbnail img")
tgt.prop("src", tgt.data("orig_src"));
});
魔法就在选择器中。 closest 从起始元素开始查找 DOM 。我们寻找最接近 class=product 的元素。当我们找到它时,我们用 class=product_thumbnail 寻找它的子图像,然后是它的子图像。这一切都假设只有一次出现,如果有多次点击,此代码将有所不同。
找到目标后,我们首先将其原始 src 值存储在其数据集合中,然后将 src 值替换为触发 img src。
在鼠标移出时,我们取出存储在缩略图数据中的 src 并替换它。