使用此显示图像的 alt 标签 - jquery

发布于 2024-11-03 19:11:20 字数 458 浏览 1 评论 0原文

客户希望在悬停时显示 alt 标签文本(并且无法确信它应该是标题,唉)。这是我所得到的,但我只需要显示悬停的 img 的 alt 标签,而不是全部。我尝试删除“每个”,但它坏了(我知道我对此不太擅长)。如何修复它:

$("ul.thumb li img").hover(function() {
  $(this).each(function(i, ele) {
  $("li").append("<div class=alt>"+$(ele).attr("alt")+"</div>");
      $(this).mouseleave(function(event){
      $(".alt").css('display','none');
});
});
});

这里是小提琴

A client wants the alt tag text to appear when hovered (and can't be convinced it should be title, alas). This is as far as I got, but I need only the hovered img's alt tag to display, rather than all of them. I tried removing 'each' but it broke (I know I'm not very good at this). How do I fix it:

$("ul.thumb li img").hover(function() {
  $(this).each(function(i, ele) {
  $("li").append("<div class=alt>"+$(ele).attr("alt")+"</div>");
      $(this).mouseleave(function(event){
      $(".alt").css('display','none');
});
});
});

Here it is in a fiddle

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

乱世争霸 2024-11-10 19:11:20
$("ul.thumb li img").each(function() {
    $(this).parent('li').append($("<span/>").text($(this).attr("alt")).hide());
}).hover(function(){
  $(this).parent('li').children('span').show();
},function(){
  $(this).parent('li').children('span').hide();
});

演示

$("ul.thumb li img").each(function() {
    $(this).parent('li').append($("<span/>").text($(this).attr("alt")).hide());
}).hover(function(){
  $(this).parent('li').children('span').show();
},function(){
  $(this).parent('li').children('span').hide();
});

DEMO

寻梦旅人 2024-11-10 19:11:20

您可以分两步完成:

// create the divs
$("ul.thumb li img").each(function() {
    $('<div />', {
        class: 'alt', 
        text: $(this).attr("alt")
    }).appendTo($(this).parent());
});

// toggle the divs visibility
$("ul.thumb li img").hover(function() {
    $(this).parent().children('.alt').toggle();
});
// OR attach the handler to the li element instead:
$("ul.thumb li").hover(function() {
    $(this).children('.alt').toggle();
});

DEMO

You can do it in two steps:

// create the divs
$("ul.thumb li img").each(function() {
    $('<div />', {
        class: 'alt', 
        text: $(this).attr("alt")
    }).appendTo($(this).parent());
});

// toggle the divs visibility
$("ul.thumb li img").hover(function() {
    $(this).parent().children('.alt').toggle();
});
// OR attach the handler to the li element instead:
$("ul.thumb li").hover(function() {
    $(this).children('.alt').toggle();
});

DEMO

雪落纷纷 2024-11-10 19:11:20

您不需要 .each(),并且可以将 mouseleave 作为 .hover() 的第二个参数进行处理:

$("ul.thumb li img").hover(function() {
    console.log(this);
    $(this).parent().append("<div class=alt>" + $(this).attr("alt") + "</div>");
}, function() {
    $(this).siblings('.alt').remove();
});

工作演示在 http://jsfiddle.net/alnitak/dPVCN/

注意:我删除了 .alt div完全在鼠标移开时进行,否则它会一遍又一遍地附加替代文本。

更好的解决方案可能是预先创建所有 alt div,然后根据需要使用 .show().hide() 它们。

You don't need the .each(), and you can handle the mouseleave as the second parameter to .hover():

$("ul.thumb li img").hover(function() {
    console.log(this);
    $(this).parent().append("<div class=alt>" + $(this).attr("alt") + "</div>");
}, function() {
    $(this).siblings('.alt').remove();
});

Working demo at http://jsfiddle.net/alnitak/dPVCN/

NB: I'm remove the .alt div altogether on mouseout, since otherwise it would keep appending the alt text over and over again.

A better solution might be to pre-create all of the alt divs, and then just .show() or .hide() them as appropriate.

微暖i 2024-11-10 19:11:20

TheSuperTramp 的解决方案是最好的方法,但我稍微调整了它以提高性能。

$('img', 'ul').each(function() {
    $(this).parent().append('<div style="display:none">' + this.alt + '</div>'); 
}).bind({
    mouseenter: function() {
       $(this).siblings('div').show();
    },
    mouseleave: function() {
        $(this).siblings('div').hide();
    } 
});

演示:http://jsfiddle.net/5dxhC/1/

TheSuperTramp's solution is the best approach, but I've tweaked it slightly to improve performance.

$('img', 'ul').each(function() {
    $(this).parent().append('<div style="display:none">' + this.alt + '</div>'); 
}).bind({
    mouseenter: function() {
       $(this).siblings('div').show();
    },
    mouseleave: function() {
        $(this).siblings('div').hide();
    } 
});

Demo: http://jsfiddle.net/5dxhC/1/

绿光 2024-11-10 19:11:20

有两个问题:

  1. 您将 div 附加到所有 li 元素,而不仅仅是当前元素(请参阅@cdeszaq的答案)
  2. 您隐藏了新添加的 div on mouseleave ,隐藏所有未来的 .alt 元素。您应该在 mouseout 上使用 .remove() 而不是 css 属性

There are two problems:

  1. You are appending the div to all li elements instead of just the current one (see @cdeszaq's answer)
  2. You are hiding the newly added div on mouseleave , making all future .alt elements hidden. You should use .remove() instead of a css property on mouseout
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文