jquery .attr() 问题

发布于 2024-09-07 22:01:49 字数 681 浏览 5 评论 0原文

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

$(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

但失败了。建议?

I wrote this quick tooltip function for my links:

$(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});
  })
});

I want to remove the original title because having both is stupid. I know I should go something like this:

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

The problem is that I can't add it back. I tried:

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

but it failed. Suggestions?

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

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

发布评论

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

评论(2

不一样的天空 2024-09-14 22:01:49

存储在 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() 会更安全。

The value stored in title variable is local to that function, and is lost after the function is done executing anyway.

One solution would be to store the previous title in the element's data().

var $th = $(this);

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

Then access it when you need it (presumably in your next function for hover).

var $th = $(this);

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

You could bring the variable declaration outside of both functions.

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();
});

...but I think using data() would be safer.

┊风居住的梦幻卍 2024-09-14 22:01:49

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

Your title variable only exist in the scope of the first handler. You will have to store the value somewhere else accessible from the second handler.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文