为某些没有指定target的链接添加target="_blank"属性

4

我知道已经有成千上万个类似的问题了,但是在浏览了30分钟后,我还是没有找到一个针对我的特定情况的解答。

我正在寻找一个ColdFusion 7/8或Javascript或JQuery解决方案。 CF更可取。

我需要一个脚本来搜索一个大文本字符串,以查找所有不区分大小写的实例...
<a href="http://[something_external]">
那些尚未指定目标的链接。并将它们替换为...
<a href="http://[something_external]" target="_blank">

因此,将被更改的链接的标准是:

  1. href值以"http://"开头
  2. href值不包含"ourdomain.com"
  3. 没有指定目标值

例如,我在网上找到了以下内容,但它还不太正确:
REReplaceNoCase(mystring, '(<a href="http://[^"]+")>', '\1 target="_blank">', 'ALL')

明白吗?可行吗?


我的回答对你有用吗?我无法测试它。 - Kyle Macey
1个回答

4

jQuery

$(function() {
  $.each($('a[href^=http]'), function() {
    var $this = $(this);
    $this.attr('href').indexOf('ourdomain.com') >= 0 || typeof($this.attr('target')) != "undefined" || $this.attr('target', '_blank');
  });
});
  • 在文档准备就绪后循环遍历所有以http开头的链接。
  • 包含ourdomain.com吗?
  • 具有target属性吗?
  • 设置target属性。

应该是 =0 和 ="undefined" 吗? - user1316401
不,indexOf 返回字符串被找到的位置或者返回 -1,而 == 是一个比较运算符,与赋值运算符 = 不同。 - Kyle Macey
此外,如果没有找到target,您希望它返回false,以便在||/OR语句中跳过并分配target属性。 - Kyle Macey
但是标准是链接不包含“ourdomain.com”,并且它没有已定义的目标。 - user1316401
如果它包含"ourdomain.com",它将返回true并退出OR语句。如果没有,false告诉解析器继续执行OR语句。 - Kyle Macey
最后一个问题...我们是否也可以设置它忽略以“/”开头的链接?尽管没有明确指定ourdomain.com,但这些链接也是指向ourdomain.com的链接。 - user1316401

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接