从location.host获取根域

mrt*_*man 7 javascript jquery string-parsing

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

给定location.host值

foo.mysite.com
app.foo.mysite.com
mysite.com
Run Code Online (Sandbox Code Playgroud)

我如何获得根域mysite.com

我可以做一些事情,比如找到倒数第二个.,但这看起来很难看,对任何顶级域名都不行.co.uk.如果jQuery有一个包含这些信息的对象,我很乐意使用它.

我的目标是创建存在于所有子域中的cookie.要做到这一点,我需要找到.mysite.com.我不想硬编码.

小智 16

如果你想将所有内容都写在一行上 -

document.domain.split('.').reverse().splice(0,2).reverse().join('.')
Run Code Online (Sandbox Code Playgroud)

或者

location.hostname.split('.').reverse().splice(0,2).reverse().join('.')
Run Code Online (Sandbox Code Playgroud)

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

它将返回:'example.com'


mrt*_*man 7

鉴于我们的域名从.com以外的任何东西变化的可能性非常低,更不用说SLD了,我编写了类似的内容.

var temp = location.host.split('.').reverse();
var root_domain = '.' + temp[1] + '.' + temp[0];
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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