7

有很多 SO 问题似乎可以解决这个问题的变体。但它们往往是复杂的正则表达式答案,我希望我能找到更简单的东西。

给定 location.host 的值

foo.mysite.com
app.foo.mysite.com
mysite.com

如何获得根域mysite.com

我可以做一些事情,比如找到倒数第二个.,但这看起来很难看,并且不适用于任何 TLD 之类的.co.uk。如果 jQuery 有一个包含这些信息的对象,我很乐意使用它。

我的目标是创建存在于所有子域中的 cookie。为此,我需要找到.mysite.com. 我不想硬编码它。

4

5 回答 5

9

考虑到我们的域从 .com 以外的任何地方更改的可能性极低,更不用说更改为 SLD,我在其中编写了类似的代码。

var temp = location.host.split('.').reverse();
var root_domain = '.' + temp[1] + '.' + temp[0];

维护 TLD 或 SLD 列表并与之进行比较的开销和维护对我们来说不值得。

于 2012-05-03T20:30:17.257 回答
7

如果你想在一条线上全部 -

document.domain.split('.').reverse().splice(0,2).reverse().join('.')

或者

location.hostname.split('.').reverse().splice(0,2).reverse().join('.')

对于输入:'foo.example.com', 'foo.bar.example.com', 'foo.bar.fizz.buzz.example.com'

它将返回:'example.com'

于 2017-06-15T17:04:59.080 回答
4

您不能将 .co.uk 称为 TLD。它实际上是一个二级域。因此,根域是什么总是模棱两可的。
但是,您可以列出所有可用的 TLD 和二级域并尝试查找匹配项。但这将是一项非常昂贵且乏味的操作。
如果您想这样做,此TLD 和 SLD 列表可能有用:

于 2012-05-02T22:22:37.157 回答
2

我一直在使用这个:

const rootDomain = s => {
    const r =  /.*\.([^.]*[^0-9][^.]*\.[^.]*[^.0-9][^.]*$)/;
    return s.replace(r, '$1');
};

Which is similar in output to the above method using split, reverse etc., but it doesn't modify straight IP addresses.

于 2020-02-19T10:29:01.047 回答
1
const rootDomain = '.' + window.location.hostname.split('.').slice(-2).join('.');
于 2020-04-23T07:28:30.983 回答