Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图弄明白“是什么意思?”;这";在我的javascript代码中(一件事有效,另一件事无效)_Javascript_Jquery - Fatal编程技术网

试图弄明白“是什么意思?”;这";在我的javascript代码中(一件事有效,另一件事无效)

试图弄明白“是什么意思?”;这";在我的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

我一直试图通过将书中的一些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
,我认为这是一个更好、更完善的解决方案。如果您仍然想使用
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代码中引用它的位置来解决。