试图弄明白“是什么意思?”;这";在我的javascript代码中(一件事有效,另一件事无效)
我一直试图通过将书中的一些Jquery示例重构为javascript来学习javascript。在下面的代码中,我向选项卡添加了一个click listener,并在用户单击选项卡时将其更改为active试图弄明白“是什么意思?”;这";在我的javascript代码中(一件事有效,另一件事无效),javascript,jquery,Javascript,Jquery,我一直试图通过将书中的一些Jquery示例重构为javascript来学习javascript。在下面的代码中,我向选项卡添加了一个click listener,并在用户单击选项卡时将其更改为active var tabs=document.querySelectorAll(“.tabs a span”); var content=document.queryselectoral(“main.content li”); 对于(var tabNumber=0;tabNumber,如果使用this
var tabs=document.querySelectorAll(“.tabs a span”);
var content=document.queryselectoral(“main.content li”);
对于(var tabNumber=0;tabNumber,如果使用this
,我认为这是一个更好、更完善的解决方案。如果您仍然想使用tabNumber
,那么在每次单击回调中,它可能会计算为3
,因为它是上一次迭代后的数字,并且您没有tabs[3]
位置
因此,您只需关闭tabNumber
变量。我猜其他答案告诉您为什么tabs[tabNumber]
不起作用(因为它来自for循环的分数,因此始终等于tabNumber的较大值)
这就是为什么我建议使用.forEach
循环的原因。但要小心,因为它不适用于document.queryselectoral()
生成的DOM节点数组,但您可以使用:
// ES6
Array.from(document.querySelectorAll('...'))
// ES5
[].slice.call(document.querySelectorAll('...'))
总之,我简化了你的代码。
请注意,我将当前活动的选项卡保存在变量中,以防止另一个for
循环。您还可以执行以下操作:
document.querySelector('.active').classList.remove('active')
但是我喜欢减少DOM的读取量
祝您好运,将一些jQuery代码重新写入Vanilla JS似乎是一个好方法,您可能会更好地理解JavaScript。如果您使用console.log(tabNumber)在事件处理程序中,无论单击哪个项目,都会发现它是3。请尽可能多地使用let
for for循环,但问题可以通过闭包或在JS代码中引用它的位置来解决。