是否可以只使用一个正则表达式向所有target="_blank"
个标签添加<a>
?我一直在尝试消极和积极的前瞻/后视,但无济于事。这应该:
href
以http://
target
标记,则添加target="_blank"
标记target
标记,则会检查target
标记是否尚未设置为"_blank"
,如果没有,则会将其替换为target="_blank"
这可能吗?如果不是,那么计算密集度最低的方法是什么?
答案 0 :(得分:3)
你没有真正指定这是否是来自DOM的html(以及其他内容)。假设您要修改DOM ...使用jQuery,您可以执行以下操作:
$(document).ready( function() {
$('a').filter( function() {
return $(this).attr('href').substr(0, 7) == "http://";
}).attr('target', '_blank');
});
这是一个显示它有用的jsfiddle(你可以检查元素,看看a
以href
开头的http://
有target="_blank"
): http://jsfiddle.net/amRrj/
答案 1 :(得分: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
要插入的属性值
对于更复杂的编辑,您可以将XMLStarlet与xslt转换一起使用。
答案 2 :(得分:0)
另一个选择是将target="_blank"
添加到<base href…>
。这将全局影响页面<a>
标记目标,而不是需要单独添加它们。 <a>
标记上的目标声明将覆盖此标记。
var target = '_self';
if(external){
target = '_blank';
}
$('#base_tag').attr('target', target);