选择 allElementsByID 并向其添加 class 时出错
Error while selecting allElementsByID and adding a class to them
您好,我正在尝试向网页上的所有元素添加 class。总体目标是抓取网页上的所有元素并添加 class。包含字体大小的 class 将更改为隐藏消息。
我遇到了这个错误
未捕获的类型错误:无法设置 属性 'innerHTML' 为 null
我已经尝试将我的脚本移到 index.html 的 body 标签之外,但它仍然无法正常工作。
另一个问题是我无法将 class 添加到我选择的所有 ID。我可以像
一样手动添加 classes
$("#iconLog").addClass("style"); //this works
但是当我尝试像这样添加 class 时
empTwo = "#" + temp; //where empTwo is a string that equals "#iconLog"
$("empTwo").addClass("style") //this does not work
我将post我的整个脚本放在下面以供参考
$(function() {
var hideMsg = "f";
var n = hideMsg.length;
var i;
var j;
var holder;
var hideHolder;
// on button click - hide msg
$('#btnHide').on('click', function() {
//grab all IDS ON WEBPAGE
var allElements = document.getElementsByTagName("*");
var allIds = [];
for (var i = 0, n = allElements.length; i < n; ++i) {
var el = allElements[i];
if (el.id) {
allIds.push(el.id);
}
}
//ERRORS HAPPENING IN THIS LOOP
for(var i = 0; i < allElements.length; ++i)
{
console.log(allIds[i]);
try{
var temp = document.getElementById(allIds[i]).id;
}
catch(err){
document.getElementById("*").innerHTML = err.message;
}
tempTwo = "#" + temp;
console.log(tempTwo);
//$("#iconLog").addClass("style") //this works
$("tempTwo").addClass("style"); //this does not work
}
for(i = 0; i < n; i++) {
//set var holder to first value of the message to hide
holder = hideMsg.charCodeAt(i);
for(j = 7; -1 < j; j--) {
//set hideHolder to holders value
hideHolder = holder;
//mask hideHolder to grab the first bit to hide
hideHolder = hideHolder & (1<<j);
//grab the first element ID
if(hideHolder === 0) {
// embed the bit
// bitwise &=
} else {
//embed the bit
// bitwise ^=
}
}
}
});
});
从 empTwo
中删除双引号。将变量作为选择器传递时不需要引号。变量本身包含一个字符串,因此您不需要引号。
empTwo = "#" + temp;
$(empTwo).addClass("style") //this will work
嗯,
试试这个...
因此,您在引号中传递了变量,而不是为 empTwo 获取值,而是直接搜索 "empTwo".
$(empTwo).addClass("style");
要获取所有元素试试这个-
var allElements = = document.body.getElementsByTagName("*");
希望对您有所帮助:)
empTwo = "#" + temp; //where empTwo is a string that equals "#iconLog"
$("empTwo").addClass("style") //this does not work
你在第二行写错了。
变量 empTwo 已经是字符串格式。
所以你需要做的就是
$(empTwo).addClass("style") //this works because empTwo returns "#iconLog"
要向所有元素添加 class,您不需要 for 循环。试试这个:
$("*").addClass("style");
同样设置所有元素的内部html。试试这个:
$("*").html("Html here");
试试这个:
$(empTwo).addClass("style")
注意:您使用的是字符串而不是变量:
您好,我正在尝试向网页上的所有元素添加 class。总体目标是抓取网页上的所有元素并添加 class。包含字体大小的 class 将更改为隐藏消息。
我遇到了这个错误 未捕获的类型错误:无法设置 属性 'innerHTML' 为 null
我已经尝试将我的脚本移到 index.html 的 body 标签之外,但它仍然无法正常工作。
另一个问题是我无法将 class 添加到我选择的所有 ID。我可以像
一样手动添加 classes$("#iconLog").addClass("style"); //this works
但是当我尝试像这样添加 class 时
empTwo = "#" + temp; //where empTwo is a string that equals "#iconLog"
$("empTwo").addClass("style") //this does not work
我将post我的整个脚本放在下面以供参考
$(function() {
var hideMsg = "f";
var n = hideMsg.length;
var i;
var j;
var holder;
var hideHolder;
// on button click - hide msg
$('#btnHide').on('click', function() {
//grab all IDS ON WEBPAGE
var allElements = document.getElementsByTagName("*");
var allIds = [];
for (var i = 0, n = allElements.length; i < n; ++i) {
var el = allElements[i];
if (el.id) {
allIds.push(el.id);
}
}
//ERRORS HAPPENING IN THIS LOOP
for(var i = 0; i < allElements.length; ++i)
{
console.log(allIds[i]);
try{
var temp = document.getElementById(allIds[i]).id;
}
catch(err){
document.getElementById("*").innerHTML = err.message;
}
tempTwo = "#" + temp;
console.log(tempTwo);
//$("#iconLog").addClass("style") //this works
$("tempTwo").addClass("style"); //this does not work
}
for(i = 0; i < n; i++) {
//set var holder to first value of the message to hide
holder = hideMsg.charCodeAt(i);
for(j = 7; -1 < j; j--) {
//set hideHolder to holders value
hideHolder = holder;
//mask hideHolder to grab the first bit to hide
hideHolder = hideHolder & (1<<j);
//grab the first element ID
if(hideHolder === 0) {
// embed the bit
// bitwise &=
} else {
//embed the bit
// bitwise ^=
}
}
}
});
});
从 empTwo
中删除双引号。将变量作为选择器传递时不需要引号。变量本身包含一个字符串,因此您不需要引号。
empTwo = "#" + temp;
$(empTwo).addClass("style") //this will work
嗯, 试试这个...
因此,您在引号中传递了变量,而不是为 empTwo 获取值,而是直接搜索 "empTwo".
$(empTwo).addClass("style");
要获取所有元素试试这个-
var allElements = = document.body.getElementsByTagName("*");
希望对您有所帮助:)
empTwo = "#" + temp; //where empTwo is a string that equals "#iconLog"
$("empTwo").addClass("style") //this does not work
你在第二行写错了。 变量 empTwo 已经是字符串格式。 所以你需要做的就是
$(empTwo).addClass("style") //this works because empTwo returns "#iconLog"
要向所有元素添加 class,您不需要 for 循环。试试这个:
$("*").addClass("style");
同样设置所有元素的内部html。试试这个:
$("*").html("Html here");
试试这个:
$(empTwo).addClass("style")
注意:您使用的是字符串而不是变量: