根据Elo评级为玩家名称加样式:代码失效及this使用疑问
为什么我的Elo评级样式添加代码不生效?
你的代码确实有两个关键问题,尤其是this的指向和内容获取方式不对,咱们一步步拆解:
问题1:this的指向完全不符合预期
你当前的代码是直接执行if (parseInt($("td.data-rating").val()) > 100),这里的this并没有指向你想操作的那个td.data-rating元素——它指向的是全局window对象(浏览器环境下)。因为你没有在遍历元素的回调或者事件处理函数里,this根本和目标单元格没关系,所以后面的$(this).closest("tr")自然找不到正确的行。
问题2:用错了获取单元格内容的方法
<td>不是表单控件(比如input、select),它没有value属性,所以$("td.data-rating").val()会返回undefined,转成整数后就是NaN,你的条件>100永远不会成立。获取表格单元格的文本内容应该用.text(),还要记得去除可能的空格(比如单元格里的换行或缩进),避免解析出错。
修正后的代码
把代码改成遍历每个评级单元格,这样this就能正确指向当前元素,同时修正内容获取方式:
$("td.data-rating").each(function() { // 获取单元格文本并去除空格,转成整数 const rating = parseInt($(this).text().trim(), 10); // 先判断是否是有效数字,再判断评级条件 if (!isNaN(rating) && rating > 100) { $(this).closest("tr").find("td.data-name").addClass("important"); } });
修正点说明:
- 用
.each()遍历所有td.data-rating元素,回调函数里的this就是当前正在处理的评级单元格,完美符合你的需求。 - 用
.text().trim()获取干净的文本内容,避免空格导致的解析错误。 - 增加
!isNaN(rating)的判断,防止单元格里有非数字内容时出现逻辑异常。
内容的提问来源于stack exchange,提问作者jablonka
相关产品推荐
相关产品推荐

