含role=button的链接触发Uncaught TypeError,影响::after伪元素功能
问题分析与解决
报错根源:脚本遍历所有
<a>标签时,若遇到无href属性或href为空的标签(比如部分带role="button"的按钮链接),直接调用.match()会因undefined抛出TypeError,中断整个脚本执行,导致后续正常链接的图标、tooltip逻辑全部失效。核心修复:在判断下载链接的逻辑中,先校验
href属性是否有效,再执行正则匹配:// 原错误代码 return $(this).attr("href").match(/\.(pdf|doc|docx|ppt|pptx|xls|xlxs|epub|odt|odp|ods|txt|rtf)$/i); // 修复后代码(兼容所有jQuery版本) const linkHref = $(this).attr("href"); return linkHref && linkHref.match(/\.(pdf|doc|docx|ppt|pptx|xls|xlxs|epub|odt|odp|ods|txt|rtf)$/i);若你的环境支持ES6可选链操作符,也可以用更简洁的写法:
return $(this).attr("href")?.match(/\.(pdf|doc|docx|ppt|pptx|xls|xlxs|epub|odt|odp|ods|txt|rtf)$/i);额外优化:直接过滤掉不需要处理的按钮类链接,避免无意义的遍历:
// 只处理非按钮类型的<a>标签 $("a:not([role='button'], [type='button'], .btn-floating)").each(function() { // 你的图标添加、tooltip绑定逻辑 });
内容的提问来源于stack exchange,提问作者Hagelslag
相关产品推荐
相关产品推荐

