无法更改作为字符串传递的 DOM 元素样式
Unable to change DOM element style that is pass as a string
我在此处将 DOM 元素作为字符串传递。
function showNotes() {
let notes = localStorage.getItem("notes");
if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
}
let html = "";
notesObj.forEach(function(element, index) {
html += `<div class="noteCard card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Title: ${element.title}</h5>
<p class="card-text">${element.text}</p>
<a href="#" id="${index}"onclick="deleteNotes(this.id)" class="card-link" >Delete Note</a>
<a href="#" id="${index}"onclick="markNotes(this.id)"class="card-link">Important</a>
</div>
</div>`;
});
我想给卡片一个样式。当用户单击 link“重要”(如 DOM 中所述)时,应更改相应的卡片颜色。所以我正在尝试访问“noteCard”class。
这是我的 markNotes() 函数
function markNotes(index) {
let notes = localStorage.getItem("notes");
if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
}
noteStyl = document.querySelectorAll('.noteCard')[0];
noteStyl.style.color = "red";
console.log("Color should be applied")
localStorage.setItem("notes", JSON.stringify(notesObj));
showNotes();
}
我也尝试了以下方法,但没有任何效果。
noteStyl = document.getElementsByClassName('noteCard')[0]
noteStyl = document.querySelector('.noteCard')[0];
使用此代码,当我单击 link“重要”时,除了打印“应应用颜色”之外,没有任何变化。
所以一定是访问DOM文件有问题。我真的陷入其中。
提前致谢
访问 DOM 没有任何问题。我认为您正在尝试访问不在页面上的元素。
您是否在 showNotes
函数末尾的页面上显示 html
?
您可以通过以下方式进行:someDiv.innerHTML = html
.
更新
访问特定的卡(不一定是第一张)也许你可以为每张卡设置一个 id 及其索引示例:card-${index}
,然后使用 .getElementById
[=21= 访问它]
更新 #2
您正在将 notesObj
存储为数组,并且在循环中(在 showNotes
中)您正在创建静态样式。所以你需要更新 notesObj
中的对象样式
所以不是设置样式,而是创建一个样式对象:
function markNotes(index) {
let notes = localStorage.getItem("notes");
if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
}
if(!notesObj[index].styles) notesObj[index].styles = {};
notesObj[index].styles.color = "red";
localStorage.setItem("notes", JSON.stringify(notesObj));
showNotes();
}
然后在showNotes
中应用它:
notesObj.forEach(function(element, index) {
style = "";
if(element.styles) {
console.log(element.styles);
for (let key in element.styles) {
style += `${key}: ${element.styles[key]}`;
}
}
console.log(style);
html += `<div class="noteCard card" style="width: 18rem; ${style}">
<div class="card-body">
<h5 class="card-title">Title: ${element.title}</h5>
<p class="card-text">${element.text}</p>
<a href="#" id="${index}"onclick="deleteNotes(this.id)" class="card-link" >Delete Note</a>
<a href="#" id="${index}"onclick="markNotes(this.id)"class="card-link">Important</a>
</div>
</div>`;
});
查看下面的代码和我添加的评论我评论了你的 localStorage 代码并添加了我的演示代码。
function showNotes() {
let notes = [{
title: 'title1',
text: 'text1'
},
{
title: 'title2',
text: 'text2'
},
{
title: 'title3',
text: 'text3'
}
];
notesObj = notes;
/* if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
} */
let html = "";
notesObj.forEach(function(element, index) {
html += `<div class="noteCard card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Title: ${element.title}</h5>
<p class="card-text">${element.text}</p>
<a href="#" id="${index}"onclick="deleteNotes(this.id)" class="card-link" >Delete Note</a>
<a href="#" id="${index}"onclick="markNotes(this.id)"class="card-link">Important</a>
</div>
</div>`;
});
document.getElementById("html").innerHTML = html; // to insert data into HTML
}
showNotes() // calling function first time
function markNotes(index) {
console.log('index', index)
/*let notes = localStorage.getItem("notes");
if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
}*/
noteStyl = document.querySelectorAll('.noteCard')[index];
noteStyl.style.color = "red";
console.log("Color should be applied")
localStorage.setItem("notes", JSON.stringify(notesObj));
//showNotes(); // See I have commented this code
}
<div id="html">
</div>
我在此处将 DOM 元素作为字符串传递。
function showNotes() {
let notes = localStorage.getItem("notes");
if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
}
let html = "";
notesObj.forEach(function(element, index) {
html += `<div class="noteCard card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Title: ${element.title}</h5>
<p class="card-text">${element.text}</p>
<a href="#" id="${index}"onclick="deleteNotes(this.id)" class="card-link" >Delete Note</a>
<a href="#" id="${index}"onclick="markNotes(this.id)"class="card-link">Important</a>
</div>
</div>`;
});
我想给卡片一个样式。当用户单击 link“重要”(如 DOM 中所述)时,应更改相应的卡片颜色。所以我正在尝试访问“noteCard”class。 这是我的 markNotes() 函数
function markNotes(index) {
let notes = localStorage.getItem("notes");
if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
}
noteStyl = document.querySelectorAll('.noteCard')[0];
noteStyl.style.color = "red";
console.log("Color should be applied")
localStorage.setItem("notes", JSON.stringify(notesObj));
showNotes();
}
我也尝试了以下方法,但没有任何效果。
noteStyl = document.getElementsByClassName('noteCard')[0]
noteStyl = document.querySelector('.noteCard')[0];
使用此代码,当我单击 link“重要”时,除了打印“应应用颜色”之外,没有任何变化。 所以一定是访问DOM文件有问题。我真的陷入其中。 提前致谢
访问 DOM 没有任何问题。我认为您正在尝试访问不在页面上的元素。
您是否在 showNotes
函数末尾的页面上显示 html
?
您可以通过以下方式进行:someDiv.innerHTML = html
.
更新
访问特定的卡(不一定是第一张)也许你可以为每张卡设置一个 id 及其索引示例:card-${index}
,然后使用 .getElementById
[=21= 访问它]
更新 #2
您正在将 notesObj
存储为数组,并且在循环中(在 showNotes
中)您正在创建静态样式。所以你需要更新 notesObj
所以不是设置样式,而是创建一个样式对象:
function markNotes(index) {
let notes = localStorage.getItem("notes");
if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
}
if(!notesObj[index].styles) notesObj[index].styles = {};
notesObj[index].styles.color = "red";
localStorage.setItem("notes", JSON.stringify(notesObj));
showNotes();
}
然后在showNotes
中应用它:
notesObj.forEach(function(element, index) {
style = "";
if(element.styles) {
console.log(element.styles);
for (let key in element.styles) {
style += `${key}: ${element.styles[key]}`;
}
}
console.log(style);
html += `<div class="noteCard card" style="width: 18rem; ${style}">
<div class="card-body">
<h5 class="card-title">Title: ${element.title}</h5>
<p class="card-text">${element.text}</p>
<a href="#" id="${index}"onclick="deleteNotes(this.id)" class="card-link" >Delete Note</a>
<a href="#" id="${index}"onclick="markNotes(this.id)"class="card-link">Important</a>
</div>
</div>`;
});
查看下面的代码和我添加的评论我评论了你的 localStorage 代码并添加了我的演示代码。
function showNotes() {
let notes = [{
title: 'title1',
text: 'text1'
},
{
title: 'title2',
text: 'text2'
},
{
title: 'title3',
text: 'text3'
}
];
notesObj = notes;
/* if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
} */
let html = "";
notesObj.forEach(function(element, index) {
html += `<div class="noteCard card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Title: ${element.title}</h5>
<p class="card-text">${element.text}</p>
<a href="#" id="${index}"onclick="deleteNotes(this.id)" class="card-link" >Delete Note</a>
<a href="#" id="${index}"onclick="markNotes(this.id)"class="card-link">Important</a>
</div>
</div>`;
});
document.getElementById("html").innerHTML = html; // to insert data into HTML
}
showNotes() // calling function first time
function markNotes(index) {
console.log('index', index)
/*let notes = localStorage.getItem("notes");
if (notes != null) {
notesObj = JSON.parse(notes);
} else {
notesObj = [];
}*/
noteStyl = document.querySelectorAll('.noteCard')[index];
noteStyl.style.color = "red";
console.log("Color should be applied")
localStorage.setItem("notes", JSON.stringify(notesObj));
//showNotes(); // See I have commented this code
}
<div id="html">
</div>