如何基于类/ID编写jQuery条件判断?我的代码无法匹配目标元素怎么办?
问题分析与解决办法
你遇到的问题主要出在条件判断的目标对象错误、对this上下文的误解,还有一个jQuery方法的误用,咱们一步步理清楚:
1. 错误的判断对象
你写的$( "#mycontent" ).hasClass( "half first" )是在检查表格元素(#mycontent这个<table>)是否同时拥有half和first类,但实际上这两个类是属于表格内部的<a>标签的,所以这个判断永远不会成立。
2. this上下文的问题
在AJAX的success回调函数里,this默认指向的是AJAX请求的配置对象(不是你要找的那个链接元素),所以$(this).hasClass("half first")也无法匹配到目标元素。
3. 方法名错误
另外注意:jQuery里没有prependClass这个内置方法,你应该用addClass来添加类名。
正确的实现方式
你需要先定位到目标<a>元素,然后判断它是否存在,再执行后续操作:
// 先获取目标元素 var targetLink = $("#mycontent a.half.first" + $id); // 判断元素是否存在(因为选择器已经包含了half和first前缀,只要存在就符合条件) if (targetLink.length > 0) { // 修改当前元素 targetLink.removeClass("half").addClass("paid"); // 同时处理第二个元素 $("#mycontent2 a.half.second" + $id).removeClass("half").addClass("paid"); }
或者更简洁的写法:
if ($("#mycontent a.half.first" + $id).length) { $("#mycontent a.half.first" + $id).removeClass("half").addClass("paid"); $("#mycontent2 a.half.second" + $id).removeClass("half").addClass("paid"); }
这样就能正确匹配到你页面中的<a href="#inbound" class="half first3547"...>元素,当$id等于3547时,就会执行类名的修改操作。
内容的提问来源于stack exchange,提问作者osakagreg
相关产品推荐
相关产品推荐

