即removeAttr标题问题

时间:2011-05-06 09:00:34

标签: javascript jquery internet-explorer

当我尝试从元素中删除attr标题时,它会在第二次将元素删除时将其删除。

此问题仅发生在Internet Explorer中。

这是代码:

$('span').live({"mouseover": function(){
    clearTimeout($(this).data('timeoutId'));
    var title = $(this).attr('title');
    $(this).removeAttr("title");
    if($(this).children('.tip-hover').length > 0){
        if($(this).children('.tip-hover').is(':visible') == false){
            $(document).find('.tip-hover').hide();
            $(this).children('.tip-hover').fadeIn(100);
        }else{
            $(document).find('.tip-hover').hide();
            $(this).children('.tip-hover').show();
        }
    }else{

        if(title != false){
            var height = $(this).css('line-height') + 2;
            $(this).prepend('<div class="tip-hover"><div class="tip-top"></div><div class="tip-hover-wrap"><div class="tip-hover-inner">' + title + '</div></div></div>');
            $(this).children('.tip-hover').css("margin-top", height + "px");
            var width = $(this).width() / 2;
            $(this).children('.tip-hover').css("padding-left",width+"px");
        }
    }

},
    "mouseout": function() {
        var someelement = this;
        var timeoutId = setTimeout(function(){ $(someelement).find(".tip-hover").fadeOut("slow");}, 350);
        $(someelement).data('timeoutId', timeoutId);
    }
});

1 个答案:

答案 0 :(得分:4)

第一次显示title的原因是因为您只删除title上的mouseover属性。到那时,已经太晚了!

我建议您在加载文档后立即删除事件处理程序之外的标题属性,并将备份保存在自定义data-*属性中。

$(function() {
  $('span').each(function() {
    var $this = $(this);
    $this
      .data('title', $this.attr('title'))
      .removeAttr('title');
  });
});

然后,在您的代码中,而不是......

var title = $(this).attr('title');

使用:

var title = $(this).data('title');