如何删除特定的javascript操作?

时间:2011-03-21 15:08:19

标签: javascript jquery

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

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

3 个答案:

答案 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);