如何使用jQuery为全站特定链接的rel属性追加额外值
问题排查
你的原有代码存在三个核心问题:
- 未遍历所有链接:仅读取页面第一个
<a>标签的href属性做判断,且判断通过后会直接修改所有<a>标签的rel属性,所有链接都会被统一赋值,逻辑不符合需求。 - href拆分逻辑不可靠:手动拆分href字符串的方式无法适配无协议前缀的相对路径链接(比如你代码里的
href="example.com"),会导致取值报错、判断失效。 - 缺少example.com的处理逻辑:仅写了amzn.to的判断分支,没有实现第二个需求的相关逻辑。
实现代码
将你的JS逻辑替换为以下代码即可实现需求:
jQuery(document).ready(function() { // 遍历所有a标签 jQuery('a').each(function() { const link = jQuery(this); // 优先用原生hostname属性获取域名,兼容各种href格式 const domain = this.hostname; // 处理amzn.to链接 if (domain === 'amzn.to') { link.attr('rel', 'nofollow sponsored'); } // 处理example.com链接,兼容相对路径写法 if (domain === 'example.com' || link.attr('href') === 'example.com') { link.attr('rel', 'follow'); } }); });
以上代码做了针对性优化:调用each方法遍历页面所有链接,每个链接单独判断单独赋值,不会互相干扰;直接用DOM原生的hostname属性获取链接域名,兼容带协议、不带协议、带路径的各种href写法,不需要手动拆分字符串;同时覆盖两种域名的处理逻辑,包裹在document.ready回调中避免DOM未加载完成就执行逻辑的问题。
内容的提问来源于stack exchange,提问作者Monzur Alam
相关产品推荐
相关产品推荐

