【问题标题】:Remove all target="_blank" from links从链接中删除所有 target="_blank"
【发布时间】:2017-02-06 23:32:43
【问题描述】:

我在搞乱 jQuery,遇到了一个我似乎无法解决的问题。我知道使用 jQuery 是可能的,但找不到合适的示例来解决。我有一个带有几个常规链接的页面,其中添加了属性/值target="_blank"

使用 jQuery/JavaScript 从页面上的每个链接中删除该值的最佳方法是什么?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    这应该用 jQuery 来做...

    $('a[target="_blank"]').removeAttr('target');
    

    使用现代浏览器...

    Array.from(document.querySelectorAll('a[target="_blank"]'))
      .forEach(link => link.removeAttribute('target'));
    

    使用较旧的浏览器,例如早期的 IE...

    var links = document.links, i, length;
    
    for (i = 0, length = links.length; i < length; i++) {
        links[i].target == '_blank' && links[i].removeAttribute('target');
    }
    

    【讨论】:

    • 为什么要打扰.slice()?由于您使用的是.forEach(),因此只需设置该方法的上下文即可。 [].forEach.call(document.querySelectorAll(...
    • @amnotiam 我没有考虑过,但这确实是实现它的更好方法。感谢您的评论,我已经更新了我的答案。
    • 不太喜欢在比较表达式中做事,我和其他人可能更清楚地使用 2 个额外的字符并写:if (links[i].target == '_blank') links[i].removeAttribute('target'); 或将其设置为 '' 不管:links[i].target = '';
    • @RobG 我同意起初可能有点难以理解。我认为removeAttribute() 会比将target 设置为空字符串更干净,我知道即使属性丢失它也是空的,但我不确定如果我在属性存在时设置为空它是否会删除它已经,这并不重要,因为结果是一样的。 设置它不管 将覆盖不是_blanktarget 属性。
    • 在一个月的星期天,我永远不会想出版本 2 - 现代浏览器代码。神秘而整洁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多