Ben*_*rts 9 javascript django jquery
我正在构建一个定制的,行业特定的cms(使用django).在后端,网站管理员可以指定内部链接,例如"/ page1"或外部链接,用于整个网站中的各种导航元素(<a>在渲染时都使用).问题是我希望在当前选项卡中打开内部链接,但外部链接应该用于target="_blank"打开新选项卡或窗口.
我如何处理html来实现这一目标?
我更喜欢服务器端解决方案,但我不知道在django中预处理渲染模板的任何干净方法.因此,我认为最简单的方法可能是javascript/jquery解决方案:在每个页面加载时运行的脚本,它将target ="_ blank"属性添加到所有外部链接但不添加内部链接.但我也不确定如何做到这一点.
Chr*_*att 35
我已经使用了以下一段时间了.不记得我最初在哪里找到它:
$.expr[':'].external = function(obj){
return !obj.href.match(/^mailto\:/)
&& (obj.hostname != location.hostname)
&& !obj.href.match(/^javascript\:/)
&& !obj.href.match(/^$/)
};
Run Code Online (Sandbox Code Playgroud)
这会添加一个:externaljQuery选择器,所以你可以这样做:
$('a:external').attr('target', '_blank');
Run Code Online (Sandbox Code Playgroud)
关于使用自定义选择器的好处是,如果您需要修改构成"外部"链接的内容,您可以在一个地方进行更改,而不必担心代码的其余部分.例如,在我的组织中,我们有一些不是"外部"的子域,但我们仍然希望在新窗口中打开.
尝试类似的东西
for (var links = document.links, i = 0, a; a = links[i]; i++) {
if (a.host !== location.host) {
a.target = '_blank';
}
}
Run Code Online (Sandbox Code Playgroud)
当文档树中存在所有链接时,不要忘记运行脚本 - window.onload事件.
| 归档时间: |
|
| 查看次数: |
6398 次 |
| 最近记录: |