javascript - js 获取网站的根域名
巴扎黑
巴扎黑 2017-04-11 12:43:42
[JavaScript讨论组]

如:在 www.baidu.com获取 baidu.com

a.baidu.com 获取 baidu.com
可能有很多人没有明白我的意思,这的难点是不可能用正则获取匹配截取获取根域名的
比如www.a.china.com.cn你怎么知道截取的是china.com.cn呢??
所以我感觉应该有个域名库然后在匹配吧。

巴扎黑
巴扎黑

全部回复(5)
怪我咯

把 host 按 . 分割,length 为 2,不用处理,大于 2 的去掉数组首位。

var hostArr = location.host.split('.')
hostArr.length === 2 ? hostArr.join('.') : hostArr.slice(1).join('.')

哦,不对。我没有考虑到三级域名...还是需要一个特征库匹配。

ringa_lee

判断这个显然需要额外知识。

应该有个域名库然后在匹配吧 这个方向是对的。你想到的那个域名库叫做 public suffix list 。

www.a.china.com.cn中的.com.cn是一个public suffix,那么网站自己的部分就是下一级的 china.com.cn

PHP中文网
document.location

里面有你想要的


function getLocation(){
    var arr = document.domain.split('.');
    if(arr.length === 2){
        return document.domain;
    }
    if(arr.length > 2 && arr[0] !== 'www'){
      return arr.slice(1).join('.')
    } 
    return arr.slice(1).join('.') 
}

如果用的是IP访问就有问题,三四级域名怎么办,要一个域名库了吗,哭死

迷茫

正则表达式替换一下:

document.domain.match(/[^\.]+\.[^\.]+$/)[0]

貌似有问题,如果这样呢:

document.domain.replace(/^[^\.]+\./, "")

还是有问题,这样吧:

var arr = document.domain.match(/[^\.]+/g);
if(arr.length == 2)
    console.log(arr.join("."))
else if(arr.length >=3){
    arr.shift();
    console.log(arr.join("."))
}
ringa_lee

不能直接获取啊,你获取当前链接然后截取吧。

function getLocation(href) {
    var match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);
    return match && {
        protocol: match[1],
        host: match[2],
        hostname: match[3],
        port: match[4],
        pathname: match[5],
        search: match[6],
        hash: match[7]
    }
}
getLocation(document.location.href)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号