You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

学习jQuery时遭遇"Invalid left-hand side in assignment"错误的技术求助

分析"Invalid left-hand side in assignment"错误及解决方法

嘿,我来帮你拆解这个问题~首先,你遇到的这个错误核心是语法逻辑错误,咱们先看你写的代码里的问题点:

let a = $("td:contains('"+ word +"')") = function(){ 
  $(this).closest('tr').hide(); 
  $(this).closest('tr').wrap('<hidden>'); 
  state = true; 
} 
a();

这里的$("td:contains('"+ word +"')") = function(){...}完全不符合JavaScript语法——赋值运算符=的左边必须是一个可以被赋值的目标(比如变量、对象属性),但$("td:...")是jQuery选择器返回的对象,它是一个表达式,不能被直接赋值为函数。你相当于同时做了两次赋值,而且第一次赋值的左操作数不合法,这就触发了"Invalid left-hand side in assignment"错误。

你的需求应该是这样吧?

我猜你是想找到包含指定word<td>元素,然后对它们所在的<tr>执行隐藏、包裹操作,对吧?那咱们分两种场景给出正确的写法:


场景1:需要触发事件(比如点击<td>时执行操作)

如果是要在用户点击匹配的<td>时执行逻辑,应该用jQuery的.on()方法绑定事件:

// 找到所有包含指定word的td,绑定点击事件
$("td:contains('" + word + "')").on('click', function() {
  const $tr = $(this).closest('tr'); // 缓存父tr,避免重复DOM查询
  $tr.hide();
  // 注意:<hidden>不是标准HTML标签,建议用带类名的div或者直接依赖hide()的样式
  $tr.wrap('<div class="hidden-wrapper"></div>');
  state = true;
});

这里的this会指向被点击的<td>元素,.on('click', 函数)会给每个匹配的<td>绑定点击事件,点击时就会执行函数里的逻辑。

场景2:页面加载后直接执行操作(无需用户触发)

如果是想页面加载完成后,直接对匹配的<td>所在的<tr>执行操作,用.each()遍历元素即可:

// 遍历所有匹配的td,逐个执行操作
$("td:contains('" + word + "')").each(function() {
  const $tr = $(this).closest('tr');
  $tr.hide();
  $tr.wrap('<div class="hidden-wrapper"></div>');
  state = true;
});

.each()会遍历jQuery选择器返回的所有元素,回调函数里的this指向当前遍历到的<td>


额外小提示

  1. <hidden>不是标准的HTML标签,浏览器可能无法正确解析,建议用带类名的容器(比如<div class="hidden-wrapper">),或者如果只是为了隐藏,.hide()方法已经会给元素添加display: none的样式,足够满足隐藏需求。
  2. 尽量缓存DOM查询结果(比如上面代码里的$tr),避免重复调用.closest('tr'),提升性能。

内容的提问来源于stack exchange,提问作者Abdallah_mohammad_90

火山引擎 最新活动