所以,我想把我的一些编码过程自动化。我想也许我不必手动命名所有引用类的常量,而是让一个函数来做。这是我的代码,我觉得它应该工作。当然它不工作。应该吗?如果不,为什么不呢?
function definitions() {
var allElem = document.querySelectorAll("*"); //Get every HTML element.
for(a = 0; a < allElem.length; a++) { //Iterate through every HTML element.
if (allElem[a].classList.length == 0) { //If an element has no class...
console.log("no var declared, " + a); //...ignore it.
} else { //If it has one or more classes...
for(b = 0; b < allElem[a].classList.length; b++) { //...iterate through the classList.
eval("const " + allElem[a].classList[b] + " = " + "document.getElementsByClassName('" + allElem[a].classList[b] + "');"); //Declare a constant named for the class if refers to
console.log("const " + allElem[a].classList[b] + " = " + "document.getElementsByClassName('" + allElem[a].classList[b] + "');");
}
}
}
console.log(document.getElementsByClassName('clone').length); //This logs 10, which is correct.
console.log(clone.length); // 'Uncaught ReferenceError: clone is not defined'. But... but... I thought I did... :'(
}
1条答案
按热度按时间shyt4zoc1#
您的代码存在一些问题
您使用
eval
动态创建常量,该常量具有您正在迭代的类名,这会降低速度,并可被攻击者利用来执行任意代码。您可以使用更直接的方法,
像这样