如何删除特定的javascript操作?

如何删除特定的javascript操作?,javascript,jquery,Javascript,Jquery,对于我的网站,我使用以下代码 <script type="text/javascript"> jQuery(document).ready(function($) { $("#body a").filter(function() { return this.hostname && this.hostname !== location.hostname; }).addClass('external').attr("targ

对于我的网站,我使用以下代码

<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>

jQuery(文档).ready(函数($){
$(“#主体a”).filter(函数(){
返回this.hostname&&this.hostname!==location.hostname;
}).addClass(“外部”).attr(“目标”,“空白”);
});
但这会将target=“\u blank”甚至添加到我的子域中。如何排除使用_blank添加我的子域? 多谢各位


如果您只有一级子域,将始终为您提供域+顶级域。有了更多的子域,您就必须为每一层使用shift()。由于顶部域(co.uk等)中的点数不同,不容易实现更通用的解决方案。

此简单函数将删除除指定数量的域/子域以外的所有域/子域(默认情况下为2):

像这样使用它:

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;
}

最简单的方法是在其中编码您的域名:

return !/(\.|^)example.com$/.test(this.hostname);

您是否有任何特殊原因要覆盖现有的
join
方法?谢谢您的帮助。但是我在代码中的什么地方添加这些呢?你能把完整的代码包装在我的代码中吗?@RoToRa,有些东西让我相信join()方法在所有浏览器中都不可用。。。但你完全正确!谢谢如果我想从该函数中排除某些特定的外部域,该怎么办。例如,如果链接指向my domain/my subdomain/google/stackflow,我不希望添加目标属性。怎么用?非常感谢。
function set() {
    var i, s = {};
    for (i = 0; i < arguments.length; i++)
        s[arguments[i]] = true;
    return s;
}
return this.hostname && !(removeSubdomain(this.hostname) in 
    set("google.com", "stackoverflow.com", "mysite.net"))
return !/(\.|^)example.com$/.test(this.hostname);