Javascript 循环代码 getElementByID
Javascript code getElementByID for loop
我不明白为什么下面的 for 循环不起作用。
我创建了一个可以正常工作的函数,因此 HTML 不是问题。这是有效的函数:
function deactivateAllTabs() {
document.getElementById('tab-header-1').className = 'tab-header';
document.getElementById('tab-header-2').className = 'tab-header';
document.getElementById('tab-header-3').className = 'tab-header';
document.getElementById('tab-content-1').className = 'tab-content';
document.getElementById('tab-content-2').className = 'tab-content';
document.getElementById('tab-content-3').className = 'tab-content';
}
而不是 hard-coding tab-headers 和 tab-contents id,我想我会创建一个 for 循环来自动处理未来的附加选项卡。
如果我分别再添加一组:
document.getElementById('tab-header-4').className = 'tab-header';
document.getElementById('tab-content-4').className = 'tab-content';
以上一切正常。当我尝试下面的 for 循环时它失败了。知道我哪里出错了吗?
单击标签页时出现的错误是:
Uncaught TypeError: Cannot set property 'className' of null
function deactivateAllTabs() {
for (var i = 0; i < tabHeaders.length; i++) {
document.getElementById('tab-header-'+i).className = 'tab-header';
document.getElementById('tab-content-'+i).className = 'tab-content';
}
}
您的循环从 0 开始,但您的选项卡 headers 从 1 开始。
function deactivateAllTabs() {
for (var i = 1; i <= tabHeaders.length; i++) {
document.getElementById('tab-header-'+i).className = 'tab-header';
document.getElementById('tab-content-'+i).className = 'tab-content';
}
}
您的 for 循环是零索引的,但选项卡是一索引的。这应该从 1 而不是 0 开始工作。对吧?
function deactivateAllTabs() {
for (var i = 1; i < tabHeaders.length; i++) {
document.getElementById('tab-header-'+i).className = 'tab-header';
document.getElementById('tab-content-'+i).className = 'tab-content';
}
}
我想你可以使用 .
function deactivateAllTabs() {
for (var i = 0; i < tabHeaders.length; i++) {
document.getElementById('tab-header-'+i).setAttr(className, 'tab-header');
document.getElementById('tab-content-'+i).setAttr(className,'tab-content');
}
}
请参阅 Neil 的回答来解决您的问题
这是使用 jquery
的备选答案
您可以 select 所有以相同名称开头的选项卡并更改其 class 而无需循环。
$('div[id^="tab-header-"]').attr('class', 'tab-header');
$('div[id^="tab-content-"]').attr('class', 'tab-content');
我不明白为什么下面的 for 循环不起作用。
我创建了一个可以正常工作的函数,因此 HTML 不是问题。这是有效的函数:
function deactivateAllTabs() {
document.getElementById('tab-header-1').className = 'tab-header';
document.getElementById('tab-header-2').className = 'tab-header';
document.getElementById('tab-header-3').className = 'tab-header';
document.getElementById('tab-content-1').className = 'tab-content';
document.getElementById('tab-content-2').className = 'tab-content';
document.getElementById('tab-content-3').className = 'tab-content';
}
而不是 hard-coding tab-headers 和 tab-contents id,我想我会创建一个 for 循环来自动处理未来的附加选项卡。
如果我分别再添加一组:
document.getElementById('tab-header-4').className = 'tab-header';
document.getElementById('tab-content-4').className = 'tab-content';
以上一切正常。当我尝试下面的 for 循环时它失败了。知道我哪里出错了吗?
单击标签页时出现的错误是:
Uncaught TypeError: Cannot set property 'className' of null
function deactivateAllTabs() {
for (var i = 0; i < tabHeaders.length; i++) {
document.getElementById('tab-header-'+i).className = 'tab-header';
document.getElementById('tab-content-'+i).className = 'tab-content';
}
}
您的循环从 0 开始,但您的选项卡 headers 从 1 开始。
function deactivateAllTabs() {
for (var i = 1; i <= tabHeaders.length; i++) {
document.getElementById('tab-header-'+i).className = 'tab-header';
document.getElementById('tab-content-'+i).className = 'tab-content';
}
}
您的 for 循环是零索引的,但选项卡是一索引的。这应该从 1 而不是 0 开始工作。对吧?
function deactivateAllTabs() {
for (var i = 1; i < tabHeaders.length; i++) {
document.getElementById('tab-header-'+i).className = 'tab-header';
document.getElementById('tab-content-'+i).className = 'tab-content';
}
}
我想你可以使用 .
function deactivateAllTabs() {
for (var i = 0; i < tabHeaders.length; i++) {
document.getElementById('tab-header-'+i).setAttr(className, 'tab-header');
document.getElementById('tab-content-'+i).setAttr(className,'tab-content');
}
}
请参阅 Neil 的回答来解决您的问题
这是使用 jquery
的备选答案您可以 select 所有以相同名称开头的选项卡并更改其 class 而无需循环。
$('div[id^="tab-header-"]').attr('class', 'tab-header');
$('div[id^="tab-content-"]').attr('class', 'tab-content');