Проблемы с jquery .attr () - PullRequest
       2

Проблемы с jquery .attr ()

3 голосов
/ 03 июля 2010

Я написал эту функцию быстрой подсказки для своих ссылок:

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

но это не удалось. Предложения?

Ответы [ 2 ]

6 голосов
/ 03 июля 2010

Значение, хранящееся в переменной 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() будет безопаснее.

2 голосов
/ 03 июля 2010

Ваша переменная заголовка существует только в области действия первого обработчика.Вам нужно будет сохранить значение в другом месте, доступном из второго обработчика.

...