jQuery需要重新附加元素onClick的标题

时间:2013-06-04 02:40:36

标签: jquery onclick title

使用以下jQuery代码:

$(document).ready(function() {
    $('a[title]').mouseover(function () {
        $this = $(this);
        $this.data('title', $this.attr('title'));
        // Using null here wouldn't work in IE, but empty string will work just fine.
        $this.attr('title', '');
    }).mouseout(function () {
        $this = $(this);
        $this.attr('title', $this.data('title'));
    });
    $('[data-title]').click(function(e) {
        e.preventDefault();
        $this = $(this);
        $this.attr('title', $this.data('title'));
        $this.removeAttr('data-title');
        $(this).click();
    });
});

此代码的原因是仅在title标记悬停时从<a>标记中删除mediaboxadvanced属性,因为我碰巧需要此插件的title属性data-title,因为它使用title属性作为图像弹出的标题,这就是我想要的。我在悬停时将数据标题存储在数据标题内部的原因是因为我不希望HTML标记显示在标题中并且无法找到用于删除此HTML标记的解决方案(这很难看到)通过工具提示(来自title属性)显示。所以,说到这一点,我认为我们根本不需要工具提示,但是我无法在<a>属性上重新分配title属性。

实际上,如果我们可以在Click事件发生之前以某种方式将其分配回{{1}}标记,那将是很好的,这正是我在上面的代码中尝试做的事情。但由于某种原因,这里没有分配title属性......

2 个答案:

答案 0 :(得分:1)

有两点

  1. 没有与data-title元素相关联的a属性,您只有title属性。所以你需要更改选择器
  2. 您正在触发click处理程序中的单击处理程序,触发器无限期递归导致Maximum recursion depth exceeded now错误
  3. 更新:
    不需要所有这些东西,插件为我们提供了使用linkmapper扩展它的工具。

    在插件文件的底部有

    Mediabox.scanPage = function() {
    //  if (Browser.Platform.ios && !(navigator.userAgent.match(/iPad/i))) return;  // this quits the process if the visitor is using a non-iPad iOS device (iPhone or iPod Touch)
    //  $$('#mb_').each(function(hide) { hide.set('display', 'none'); });
        var links = $$("a").filter(function(el) {
            return el.rel && el.rel.test(/^lightbox/i);
        });
    //  $$(links).mediabox({/* Put custom options here */}, null, function(el) {
        links.mediabox({/* Put custom options here */}, null, function(el) {
            var rel0 = this.rel.replace(/[\[\]|]/gi," ");
            var relsize = rel0.split(" ");
    //      return (this == el) || ((this.rel.length > 8) && el.rel.match(relsize[1]));
    
            var relsearch = "\\["+relsize[1]+"[ \\]]";
            var relregexp = new RegExp(relsearch);
            return (this == el) || ((this.rel.length > 8) && el.rel.match(relregexp));
        });
    };
    

    将其更改为

    Mediabox.scanPage = function() {
    //  if (Browser.Platform.ios && !(navigator.userAgent.match(/iPad/i))) return;  // this quits the process if the visitor is using a non-iPad iOS device (iPhone or iPod Touch)
    //  $$('#mb_').each(function(hide) { hide.set('display', 'none'); });
        var links = $$("a").filter(function(el) {
            return el.rel && el.rel.test(/^lightbox/i);
        });
    //  $$(links).mediabox({/* Put custom options here */}, null, function(el) {
        links.mediabox({/* Put custom options here */}, function(el) {
        //This is the linkmapper function
            elrel = el.rel.split(/[\[\]]/);
            elrel = elrel[1];
            return [el.get('href'), $(el).data('title'), elrel];    // thanks to Dušan Medlín for figuring out the URL bug!
        }, function(el) {
            var rel0 = this.rel.replace(/[\[\]|]/gi," ");
            var relsize = rel0.split(" ");
    //      return (this == el) || ((this.rel.length > 8) && el.rel.match(relsize[1]));
    
            var relsearch = "\\["+relsize[1]+"[ \\]]";
            var relregexp = new RegExp(relsearch);
            return (this == el) || ((this.rel.length > 8) && el.rel.match(relregexp));
        });
    };
    

    然后使用title来指定标记中的标题使用data-title属性

    演示:Plunker

答案 1 :(得分:0)

尝试将选择器从$('[data-title]')更改为$('a[title]')