对于我的网站,我使用以下代码
<script type="text/javascript">
jQuery(document).ready(function($) {
$("#body a").filter(function() {
return this.hostname && this.hostname !== location.hostname;
}).addClass('external').attr("target", "_blank");
});
</script>
但是这会将target =“_ blank”添加到我的子域名中。如何排除我的子域名添加_blank? 谢谢
答案 0 :(得分:2)
这个天真的函数删除除指定数量的域/子域之外的所有域(默认情况下为2):
function removeSubdomain(hostname, keep) {
return hostname.split(".").slice(-(keep || 2)).join(".")
}
像这样使用:
jQuery(document).ready(function($) {
var source = removeSubdomain(location.hostname);
$("#body a").filter(function() {
return this.hostname && removeSubdomain(this.hostname) !== source;
}).addClass('external').attr("target", "_blank");
});
一些测试:
removeSubdomain("meta.stackoverflow.com"); // "stackoverflow.com"
removeSubdomain("test.domain.co.uk", 3); // "domain.co.uk"
removeSubdomain("simple.com") // "simple.com"
要针对域的集测试每个链接,请先添加一个简单的set
函数:
function set() {
var i, s = {};
for (i = 0; i < arguments.length; i++)
s[arguments[i]] = true;
return s;
}
并使用以下内容更新您的filter
功能:
return this.hostname && !(removeSubdomain(this.hostname) in
set("google.com", "stackoverflow.com", "mysite.net"))
答案 1 :(得分:0)
var parts = window.location.hostname.split('.');
parts.shift();
var my_domain = parts.join('.');
如果您只有一个级别的子域,将始终为您提供域名+顶级域名。对于更多子域,您必须为每个级别使用shift()。由于顶级域中的点数不同(co.uk等),因此不容易实现更通用的解决方案
答案 2 :(得分:0)
最简单的方法是在那里编码您的域名:
return !/(\.|^)example.com$/.test(this.hostname);