如何在JavaScript中提取URL的TLD?现有代码获取全URL问题排查
解决URL顶级域名(TLD)提取及判断逻辑问题
我来帮你搞定这两个问题:正确提取目标TLD,以及修复判断逻辑的异常。
问题分析
你的代码目前有两个核心问题:
- 没有对获取到的URL做解析处理,直接弹出完整链接,自然拿不到想要的TLD;
search()的判断逻辑完全错误:search()返回匹配字符串的起始索引,找不到时返回-1,但在JS的布尔判断里,-1会被视为true,导致你的真假判断完全失效。
修正后的代码
$(document).on("click", "a", function(e) { // 阻止默认跳转,方便测试效果 e.preventDefault(); var href = $(this).attr("href"); // 兼容绝对/相对链接,用URL对象解析域名 const url = new URL(href, window.location.origin); const hostname = url.hostname; // 提取顶级域名(适配.com.uk这类多段TLD) const domainParts = hostname.split('.'); let tld = ''; if (domainParts.length >= 2) { // 取域名最后两段,适配单段(.com)和双段(.com.uk)TLD tld = '.' + domainParts.slice(-2).join('.'); } alert(`提取到的TLD:${tld}`); // 修正判断逻辑:直接对比目标TLD if (tld === '.com.uk') { alert("This website is AUTHENTIC!"); } else { alert("Not AUTHENTIC!"); } });
关键改进点说明
- 用URL对象解析URL:不管是绝对链接还是相对链接,
URL对象都能帮你精准提取出域名部分(hostname),避免手动拼接字符串的麻烦; - TLD提取逻辑:通过拆分域名成数组,取最后1-2段组成TLD,同时适配
.com这类单段和.com.uk这类多段顶级域名; - 修复判断逻辑:直接对比提取到的TLD是否等于目标值,比用
search()做索引判断更准确,彻底避免布尔值判断的坑; - 阻止默认跳转:添加
e.preventDefault()防止点击链接后页面跳转,方便你测试弹出的结果。
额外提示
如果需要适配更多类型的多段TLD(比如.co.jp、.org.uk等),可以扩展判断逻辑,或者引入公共后缀列表(Public Suffix List)来更精准识别TLD,不过对于你的需求来说,上面的代码已经足够解决问题啦。
内容的提问来源于stack exchange,提问作者Mrkrabs
相关产品推荐
相关产品推荐

