4

是否可以仅使用一个正则表达式将 a 添加target="_blank"到所有标签?<a>我一直在尝试消极和积极的展望/落后,但无济于事。这应该:

  • 匹配hrefhttp://
  • 如果锚标签没有target标签,则添加target="_blank"标签
  • 如果它确实有target标签,它会检查target标签是否尚未设置为"_blank",如果没有,则将其替换为target="_blank"

这可能吗?如果不是,那么计算量最小的方法是什么?

4

3 回答 3

3

您并没有真正指定这是否是来自 DOM 的 html(除其他外)。假设您想修改 DOM... 使用 jQuery,您可以执行以下操作:

$(document).ready( function() {
    $('a').filter( function() {
        return $(this).attr('href').substr(0, 7) == "http://";
    }).attr('target', '_blank');
});

这是一个 jsfiddle 显示它的工作原理(您可以检查元素以查看a's with ' 以havehref开头):http: //jsfiddle.net/amRrj/http://target="_blank"

于 2013-04-30T13:12:47.053 回答
1

如果 HTML 也是格式良好的 XML,那么最好使用支持 xpath 和 xslt 的 XML 工具。看看XMLStarlet,它提供了类似于 grep、sed 等用于处理 XML 的工具。我认为这会做你想要的,但我还没有尝试过:

xml ed -P -S -i //a -t attr -n target -v _blank somefile.html >somefile_2.html

xml ed调用 XMLStarlet 编辑命令

-P保留格式

-S保留空格

-i //a在每个标签处插入

-t attr插入类型是属性

-n target要插入的属性名称

-v _blank要插入的属性值

对于更复杂的编辑,您可以使用带有 xslt 转换的 XMLStarlet。

于 2013-04-30T13:43:07.020 回答
0

另一种选择是添加target="_blank"<base href…&gt;. 这将全局影响页面<a>标签目标,而不需要单独添加它们。标签上的目标声明<a>将覆盖它。

    var target = '_self';

    if(external){
        target = '_blank';
    }

    $('#base_tag').attr('target', target);

小提琴

<base> 文档

于 2016-09-01T08:44:47.123 回答