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




