【问题标题】:jquery .attr() problemsjquery .attr() 问题
【发布时间】:2010-07-03 11:14:08
【问题描述】:

我为我的链接编写了这个快速工具提示功能:

$(function() {
  $('a').hover(function(e) {
    var title = $(this).attr('title');
    $('<div id="tooltip">' + title + '</div>').css({"top" : e.pageY + 12, "left" : e.pageX + 12}).appendTo('body');
  }, function() {
    $('#tooltip').remove();
  });

  $('a').mousemove(function(e){ 
    $('#tooltip').css({"top" : e.pageY + 12, "left" : e.pageX + 12});
  })
});

我想删除原来的标题,因为两者兼有是愚蠢的。我知道我应该这样做:

$('a').hover(function() {
  $(this).attr('title', '');
});

问题是我无法将其添加回来。我试过了:

$(this).attr('title', title) //from my title variable

但它失败了。有什么建议吗?

【问题讨论】:

    标签: jquery attr


    【解决方案1】:

    title 变量中存储的值是该函数的本地值,并且在函数执行完成后会丢失。

    一种解决方案是将先前的标题存储在元素的 data() 中。

    var $th = $(this);
    
    $th.data( 'prevTitle', $th.attr('title') );
    

    然后在您需要时访问它(大概在您的下一个悬停函数中)。

    var $th = $(this);
    
    $th.attr('title', $th.data( 'prevTitle' ));
    

    您可以将变量声明放在两个函数之外。

    var title;
    
    $('a').hover(function(e){
         title = $(this).attr('title');
         $('<div id="tooltip">' + title + '</div>').css({"top" : e.pageY + 12, "left" : e.pageX + 12}).appendTo('body');
    }, function(){
        $th.attr('title', title);
        $('#tooltip').remove();
    });
    

    ...但我认为使用data() 会更安全。

    【讨论】:

    • 两个函数之外的变量声明是要走的路。
    • @Gert G @patrick 我使用了 var 的外部声明,它工作得很好。谢谢。
    • @Gert - 你可能是对的,但不知何故,我觉得将信息与元素联系起来感觉更好,即使它的效率有点低。不合理,也许。 :o)
    【解决方案2】:

    您的 title 变量仅存在于第一个处理程序的范围内。您必须将值存储在第二个处理程序可访问的其他位置。

    【讨论】:

    • 谢谢。我不知道我失去了那个变量。我简单地做了一个新的,现在它可以工作了:)
    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2011-08-12
    • 2011-08-18
    相关资源
    最近更新 更多