You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为JS实现的可点击列添加右键“在新标签页打开”功能?

解决可点击列无法右键“在新标签页打开”的问题

原函数的核心问题是:仅通过JavaScript的click事件模拟跳转,DOM中没有真实的<a>链接元素,浏览器无法识别这是可跳转的链接,因此右键菜单不会出现“在新标签页打开”选项。

我们可以通过给列插入一个覆盖全屏的透明<a>标签来解决,让浏览器识别这是链接,同时保留原有的交互逻辑。以下是修改后的完整函数代码:

$.fn.avia_link_column = function()
{
    return this.each( function()
    {
        var column = $(this),
            url = column.data('link-column-url'),
            target = column.data('link-column-target');

        // 跳过无效链接或已添加overlay的列
        if( typeof url !== 'string' || url.trim() === '' || column.find('.av-column-overlay-link').length )
        {
            return;
        }

        // 插入覆盖整个列的透明<a>标签
        var overlayLink = $('<a>', {
            'class': 'av-column-overlay-link',
            'href': url,
            'rel': 'noopener noreferrer'
        });
        // 设置target属性
        if( target === '_blank' )
        {
            overlayLink.attr('target', '_blank');
        }
        column.append(overlayLink);

        // 保留原有的点击事件逻辑,处理内部链接和平滑滚动
        column.on( 'click', function(e)
        {
            // 若点击的是内部已有链接,不触发列的跳转逻辑
            if( e.target && e.target.href )
            {
                return;
            }

            // 处理锚点链接的平滑滚动逻辑
            var link = window.location.hostname + window.location.pathname;
            url = url.trim();
            if( (column.hasClass('av-cell-link') || column.hasClass('av-column-link')) && 
                (url.startsWith('#') || (url.includes(link) && url.includes('#'))) )
            {
                var reader = column.hasClass('av-cell-link') ? column.prev('a.av-screen-reader-only').first() : column.find('a.av-screen-reader-only').first();
                reader.trigger('click');
                
                // 修复标签页切换的bug
                if( target !== '_blank' )
                {
                    window.location.href = url;
                }
                
                // 阻止overlay链接的默认跳转
                e.preventDefault();
                return;
            }

            // 非锚点链接交由overlay的<a>标签处理,无需手动跳转
        });
    });
};

配套CSS样式

需要添加以下CSS,让插入的<a>标签覆盖整个列且不影响视觉:

.av-column-link, .av-cell-link {
    position: relative; /* 父元素设为相对定位,确保overlay的绝对定位生效 */
}
.av-column-overlay-link {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 10; /* 确保在内容上方,但不遮挡内部元素的交互 */
    opacity: 0; /* 完全透明,不影响视觉 */
    display: block;
}

修改说明

  1. 插入真实链接:初始化时给每个可点击列添加一个覆盖全屏的透明<a>,浏览器会自动识别为链接,右键菜单将显示“在新标签页打开”选项。
  2. 保留原有逻辑:保留了内部链接的跳转拦截、锚点平滑滚动的处理逻辑,确保原有功能不受影响。
  3. 优化判断条件:跳过无效链接和已处理的列,避免重复插入。

内容的提问来源于stack exchange,提问作者Kamil Kisieliński

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 17:36:27