2016-07-22 70 views
1

上下文:我创建一个内容表来通知用户他们已完成/访问的页面。简化IF ... Else语句与For循环[Javascript]

下面的if ... else语句正在工作(本身),但我想使用FOR循环中的“i”计数器来生成其他30章的检查。

脚本将首先加载包含值1或0的localstorage,表示visited/unvisited并将该数据传输到变量chap1check。根据结果​​,内容表应该显示用户哪个页面有或没有被访问过。

即时消息我不知道我需要做什么,但理论上,我将需要用“i”的值替换所有“chap ...”。

<script type="text/javascript"> 

var i; 
for (i = 1; i <=31; i++){ 
    var chap1Check = localStorage.getItem("chap1Status"); 

    if(chap1Check == "1"){ 
     document.getElementById('chap1Completion').innerHTML = "Completed"; 
    }else{ 
     document.getElementById('chap1Completion').innerHTML = "Incomplete"; 
    } 
} 
</script> 
+0

chap1Check应得增加一个解决方案? chap2Check等? – eltonkamami

回答

4

只需连接具有数(i)号码前字符串的一部分,然后通过在数字后的字符串的一部分。

for (var i = 1; i <= 31; i ++){ 
    var chapCheck = localStorage.getItem("chap" + i + "Status"); 
    document.getElementById('chap' + i + 'Completion').textContent = chapCheck == "1" ? "Completed" : "Incomplete"; 
} 
+0

请不要发布代码的答案。 (编辑:我看你刚刚编辑过) –

+0

innerHTML应该用textContent替换。 –

1

以下代码将起作用。 但是,只要将数组存储在本地存储中,并通过对数组进行索引来访问它,将会更加简洁。此外,请查看在for循环中使用map仿函数。

另请注意,您应该在for循环中声明i,如下所示。否则,您可能会在for循环中与将来使用i发生冲突。

for (var i = 1; i <=31; i++){ 
    var chapterChecker = localStorage.getItem("chap"+i+"Status"); 

    if(chap1Check == "1"){ 
     document.getElementById('chap'+i+'Completion').innerHTML = "Completed"; 
    }else{ 
     document.getElementById('chap'+i+'Completion').innerHTML = "Incomplete"; 
    } 
} 
1

使用ES6模板字符串可能是这个

for (var i = 1; i <=31; i++){ 
    let content = ''; 
    if(localStorage.getItem(`chap${i}Status`) == "1"){ 
     content = "Completed"; 
    }else{ 
     content = "Incomplete"; 
    } 
    document.getElementById(`chap${i}Completion`).innerHTML = content; 
}