我正在设计一个博客,其中每个博客都带有相关标签。 博客的样式根据应用于该博客的标签而有所不同。
我的For循环在到达页面上的最后一个博客之前就结束了,我也不知道为什么。
我环顾四周,发现了这个问题:Javascript for loop skips last element我尝试了该线程中的建议,但是这些建议没有用。
我尝试过的事情:
这是我的完整剧本:
//declare arrays containing every instance of each class
var postTagArray = document.getElementsByClassName('blog-tag');
var postTitleArray = document.getElementsByClassName('blog-title');
var postButtonArray = document.getElementsByClassName('blog-button');
//declare variable containing the preset tags
var Security = "/ Security";
var Cleaning = "/ Cleaning";
var Safety = "/ Safety";
var Hospitality = "/ Hospitality";
var Logistics = "/ Logistics";
var General = "/ General";
for (var i=0; i <= postTagArray.length; i++) {
//bring in the HTML of the element
var tag=postTagArray[i].innerHTML;
//compare HTML of the element and the preset tag
//then assigns a value of 0 if they match, or 1 if they don't
var secResult = tag.localeCompare(Security);
var cleResult = tag.localeCompare(Cleaning);
var safResult = tag.localeCompare(Safety);
var hosResult = tag.localeCompare(Hospitality);
var logResult = tag.localeCompare(Logistics);
var genResult = tag.localeCompare(General);
//find the result that matches (that equals 0) and assign styling accordingly
if (secResult=="0"){
postTagArray[i].style.color = "#0085CA";
postTitleArray[i].style.color = "#0085CA";
postButtonArray[i].style.background = "#0085CA";
}
if (cleResult=="0"){
postTagArray[i].style.color = "#6CC24A";
postTitleArray[i].style.color = "#6CC24A";
postButtonArray[i].style.background = "#6CC24A";
}
if (safResult=="0"){
postTagArray[i].style.color = "#EF3340";
postTitleArray[i].style.color = "#EF3340";
postButtonArray[i].style.background = "#EF3340";
}
if (hosResult=="0"){
postTagArray[i].style.color = "#D9027D";
postTitleArray[i].style.color = "#D9027D";
postButtonArray[i].style.background = "#D9027D";
}
if (logResult=="0"){
postTagArray[i].style.color = "#685BC7";
postTitleArray[i].style.color = "#685BC7";
postButtonArray[i].style.background = "#685BC7";
}
if (genResult=="0"){
postTagArray[i].style.color = "#959595";
postTitleArray[i].style.color = "#959595";
postButtonArray[i].style.background = "#959595";
}
}
如您所见,没有为最后一个博客分配与另一个“清洁”博客相同的样式。
这是我尝试使用的do / while循环:
var i = 0;
do {
//bring in the HTML of the element
var tag=postTagArray[i].innerHTML;
//compare HTML of the element and the preset tag
//then assigns a value of 0 if they match, or 1 if they don't
var secResult = tag.localeCompare(Security);
var cleResult = tag.localeCompare(Cleaning);
var safResult = tag.localeCompare(Safety);
var hosResult = tag.localeCompare(Hospitality);
var logResult = tag.localeCompare(Logistics);
var genResult = tag.localeCompare(General);
//find the result that matches (that equals 0) and assign styling accordingly
if (secResult=="0"){
postTagArray[i].style.color = "#0085CA";
postTitleArray[i].style.color = "#0085CA";
postButtonArray[i].style.background = "#0085CA";
}
if (cleResult=="0"){
postTagArray[i].style.color = "#6CC24A";
postTitleArray[i].style.color = "#6CC24A";
postButtonArray[i].style.background = "#6CC24A";
}
if (safResult=="0"){
postTagArray[i].style.color = "#EF3340";
postTitleArray[i].style.color = "#EF3340";
postButtonArray[i].style.background = "#EF3340";
}
if (hosResult=="0"){
postTagArray[i].style.color = "#D9027D";
postTitleArray[i].style.color = "#D9027D";
postButtonArray[i].style.background = "#D9027D";
}
if (logResult=="0"){
postTagArray[i].style.color = "#685BC7";
postTitleArray[i].style.color = "#685BC7";
postButtonArray[i].style.background = "#685BC7";
}
if (genResult=="0"){
postTagArray[i].style.color = "#959595";
postTitleArray[i].style.color = "#959595";
postButtonArray[i].style.background = "#959595";
}
i++;
} while (i <= postTagArray.length);
我没有主意,也不知道为什么我尝试的东西不起作用,所以任何帮助将不胜感激。
更新:感谢@JudeMaranga和@Wyck,我发现最后一个元素根本没有加载到数组中。它将第一个元素加载两次,但未到达最后一个元素。这是数组的console.log输出:
当我打印出数组的0、1、2个元素时,元素2被返回为未定义
更新2:这是指向我所构建的开发页面的链接:http://3441160.hs-sites.com/blog
我也在这里重新创建了它:
<body>
<div>
<script>
//declare arrays containing every instance of each class
var postTagArray = document.getElementsByClassName('blog-tag');
var postTitleArray = document.getElementsByClassName('blog-title');
var postButtonArray = document.getElementsByClassName('blog-button');
//declare variable containing the preset tags
var Security = "/ Security";
var Cleaning = "/ Cleaning";
var Safety = "/ Safety";
var Hospitality = "/ Hospitality";
var Logistics = "/ Logistics";
var General = "/ General";
var i;
for (let i=0; i < postTagArray.length; ++i) {
//bring in the HTML of the element
var tag=postTagArray[i].innerHTML;
//compare HTML of the element and the preset tag
//then assigns a value of 0 if they match, or 1 if they don't
var secResult = tag.localeCompare(Security);
var cleResult = tag.localeCompare(Cleaning);
var safResult = tag.localeCompare(Safety);
var hosResult = tag.localeCompare(Hospitality);
var logResult = tag.localeCompare(Logistics);
var genResult = tag.localeCompare(General);
//find the result that matches (that equals 0) and assign styling accordingly
if (secResult=="0"){
postTagArray[i].style.color = "#0085CA";
postTitleArray[i].style.color = "#0085CA";
postButtonArray[i].style.background = "#0085CA";
}
if (cleResult=="0"){
postTagArray[i].style.color = "#6CC24A";
postTitleArray[i].style.color = "#6CC24A";
postButtonArray[i].style.background = "#6CC24A";
}
if (safResult=="0"){
postTagArray[i].style.color = "#EF3340";
postTitleArray[i].style.color = "#EF3340";
postButtonArray[i].style.background = "#EF3340";
}
if (hosResult=="0"){
postTagArray[i].style.color = "#D9027D";
postTitleArray[i].style.color = "#D9027D";
postButtonArray[i].style.background = "#D9027D";
}
if (logResult=="0"){
postTagArray[i].style.color = "#685BC7";
postTitleArray[i].style.color = "#685BC7";
postButtonArray[i].style.background = "#685BC7";
}
if (genResult=="0"){
postTagArray[i].style.color = "#959595";
postTitleArray[i].style.color = "#959595";
postButtonArray[i].style.background = "#959595";
}
}
//print contents of postTagArray to the console for testing purposes
for (let i = 0; i < postTagArray.length; i++) {
console.log(i, postTagArray[i]);
}
</script>
<h1 class="blog-tag">/ Cleaning</h1>
<h2 class="blog-title">Title</h2>
<button class="blog-button">button</button>
</div>
<div>
<script>
//declare arrays containing every instance of each class
var postTagArray = document.getElementsByClassName('blog-tag');
var postTitleArray = document.getElementsByClassName('blog-title');
var postButtonArray = document.getElementsByClassName('blog-button');
//declare variable containing the preset tags
var Security = "/ Security";
var Cleaning = "/ Cleaning";
var Safety = "/ Safety";
var Hospitality = "/ Hospitality";
var Logistics = "/ Logistics";
var General = "/ General";
var i;
for (let i=0; i < postTagArray.length; ++i) {
//bring in the HTML of the element
var tag=postTagArray[i].innerHTML;
//compare HTML of the element and the preset tag
//then assigns a value of 0 if they match, or 1 if they don't
var secResult = tag.localeCompare(Security);
var cleResult = tag.localeCompare(Cleaning);
var safResult = tag.localeCompare(Safety);
var hosResult = tag.localeCompare(Hospitality);
var logResult = tag.localeCompare(Logistics);
var genResult = tag.localeCompare(General);
//find the result that matches (that equals 0) and assign styling accordingly
if (secResult=="0"){
postTagArray[i].style.color = "#0085CA";
postTitleArray[i].style.color = "#0085CA";
postButtonArray[i].style.background = "#0085CA";
}
if (cleResult=="0"){
postTagArray[i].style.color = "#6CC24A";
postTitleArray[i].style.color = "#6CC24A";
postButtonArray[i].style.background = "#6CC24A";
}
if (safResult=="0"){
postTagArray[i].style.color = "#EF3340";
postTitleArray[i].style.color = "#EF3340";
postButtonArray[i].style.background = "#EF3340";
}
if (hosResult=="0"){
postTagArray[i].style.color = "#D9027D";
postTitleArray[i].style.color = "#D9027D";
postButtonArray[i].style.background = "#D9027D";
}
if (logResult=="0"){
postTagArray[i].style.color = "#685BC7";
postTitleArray[i].style.color = "#685BC7";
postButtonArray[i].style.background = "#685BC7";
}
if (genResult=="0"){
postTagArray[i].style.color = "#959595";
postTitleArray[i].style.color = "#959595";
postButtonArray[i].style.background = "#959595";
}
}
//print contents of postTagArray to the console for testing purposes
for (let i = 0; i < postTagArray.length; i++) {
console.log(i, postTagArray[i]);
}
</script>
<h1 class="blog-tag">/ Safety</h1>
<h2 class="blog-title">Title</h2>
<button class="blog-button">button</button>
</div>
<div>
<script>
//declare arrays containing every instance of each class
var postTagArray = document.getElementsByClassName('blog-tag');
var postTitleArray = document.getElementsByClassName('blog-title');
var postButtonArray = document.getElementsByClassName('blog-button');
//declare variable containing the preset tags
var Security = "/ Security";
var Cleaning = "/ Cleaning";
var Safety = "/ Safety";
var Hospitality = "/ Hospitality";
var Logistics = "/ Logistics";
var General = "/ General";
var i;
for (let i=0; i < postTagArray.length; ++i) {
//bring in the HTML of the element
var tag=postTagArray[i].innerHTML;
//compare HTML of the element and the preset tag
//then assigns a value of 0 if they match, or 1 if they don't
var secResult = tag.localeCompare(Security);
var cleResult = tag.localeCompare(Cleaning);
var safResult = tag.localeCompare(Safety);
var hosResult = tag.localeCompare(Hospitality);
var logResult = tag.localeCompare(Logistics);
var genResult = tag.localeCompare(General);
//find the result that matches (that equals 0) and assign styling accordingly
if (secResult=="0"){
postTagArray[i].style.color = "#0085CA";
postTitleArray[i].style.color = "#0085CA";
postButtonArray[i].style.background = "#0085CA";
}
if (cleResult=="0"){
postTagArray[i].style.color = "#6CC24A";
postTitleArray[i].style.color = "#6CC24A";
postButtonArray[i].style.background = "#6CC24A";
}
if (safResult=="0"){
postTagArray[i].style.color = "#EF3340";
postTitleArray[i].style.color = "#EF3340";
postButtonArray[i].style.background = "#EF3340";
}
if (hosResult=="0"){
postTagArray[i].style.color = "#D9027D";
postTitleArray[i].style.color = "#D9027D";
postButtonArray[i].style.background = "#D9027D";
}
if (logResult=="0"){
postTagArray[i].style.color = "#685BC7";
postTitleArray[i].style.color = "#685BC7";
postButtonArray[i].style.background = "#685BC7";
}
if (genResult=="0"){
postTagArray[i].style.color = "#959595";
postTitleArray[i].style.color = "#959595";
postButtonArray[i].style.background = "#959595";
}
}
//print contents of postTagArray to the console for testing purposes
for (let i = 0; i < postTagArray.length; i++) {
console.log(i, postTagArray[i]);
}
</script>
<h1 class="blog-tag">/ Cleaning</h1>
<h2 class="blog-title">Title</h2>
<button class="blog-button">button</button>
</div>
</body>
答案 0 :(得分:0)
所以最终这是一个结构性问题。
最初,我的脚本位于博客文章上方,并且hubspot会在每篇文章中重复该脚本。
我通过将脚本移到页面底部来解决它。
感谢大家的建议