jQuery从1.7.1升级到1.12.4后单选框选择器失效求助
解决jQuery 1.7.1升级到1.12.4的选择器语法错误问题
这个问题我之前帮团队排查过,核心原因是jQuery高版本对选择器语法的校验变得更严格了——你原来的选择器写法不符合标准规范,在1.7.1里被宽松兼容了,但1.12.4直接触发语法报错。
错误原因拆解
你写的input['type=radio']:checked里,[]属性选择器内的单引号是多余的,而且这种写法不符合CSS选择器的标准格式。jQuery 1.7.1版本对这类不规范写法有兼容兜底,但从1.8+开始官方收紧了选择器的合规性要求,1.12.4自然就不认这种写法了。
三种可行的修正写法
- 标准CSS属性选择器(推荐):去掉多余的单引号
input[type=radio]:checked - jQuery内置简化选择器:用
:radio直接匹配单选框,代码更简洁:radio:checked - 带引号的标准格式(如果属性值包含特殊字符时推荐,这里radio场景可选)
input[type='radio']:checked
修正后的完整代码
把选择器替换后,代码就能在1.12.4里正常运行了:
$(".highlightedRow").each(function () { if ($(this).children("div").children(":radio:checked").length == 0) { $(this).css("background-color", "#F0AE3D"); flag = 1; } else { $(this).css("background-color", "#99E599"); } });
额外提一句:如果你的DOM结构里单选框不一定是div的直接子元素,可以把多层children()换成find(),比如$(this).find(":radio:checked"),这样能遍历所有后代元素,适配更灵活的DOM结构。
内容的提问来源于stack exchange,提问作者Gaurav Chaudhary
相关产品推荐
相关产品推荐

