【发布时间】:2019-06-17 15:36:20
【问题描述】:
我正在制作一个任务管理网页。创建任务时,我将一些内部 HTML 添加到 DOM。在内部 HTML 中,有一个任务状态标签,默认情况下 bootstrap 为 class= 'label label-info'。它看起来像这样:
我还有一个按钮事件函数可以将此状态标签从“打开”更改为“已完成”。当我单击按钮时,我想将此标签样式从“标签标签信息”变为“标签标签成功”。
我尝试使用 JQuery,但由于某种原因它无法正常工作。我是一个新手,请告诉我我哪里做错了。
以下是创建任务时添加内部HTML的代码:
var tasks = JSON.parse(localStorage.getItem('tasks'));
tasksList.innerHTML = '';
for (var i = 0; i < tasks.length; i++) {
var id = tasks[i].id;
var name = tasks[i].name;
var importance = tasks[i].importance;
var taskDate = tasks[i].date;
var note = tasks[i].note;
var status = tasks[i].status;
tasksList.innerHTML += '<div class="well">' +
'<h6>Task ID: ' + id + '</h6>' +
'<p><span class="label label-info" id="statusLabel">' + status + '</span></p>' +
'<h3>' + name + '</h3>' +
'<p><span class="glyphicon glyphicon-fire"></span> ' + importance + '</p>' +
'<p><span class="glyphicon glyphicon-calendar"></span> ' + taskDate + '</p>' +
'<p><span class="glyphicon glyphicon-comment"></span> ' + note + '</p>' +
'<a href="#" onclick="setStatusCompleted(\'' + id + '\')" class="btn btn-success">Complete</a> ' +
'<a href="#" onclick="deleteTask(\'' + id + '\')" class="btn btn-danger">Delete</a>' +
'</div>';
下面是按钮事件函数改变标签文本和样式的代码:
function setStatusCompleted(id) {
var tasks = JSON.parse(localStorage.getItem('tasks'));
for (var i = 0; i < tasks.length; i++) {
if (tasks[i].id == id) {
tasks[i].status = 'Completed';
$("#statusLabel").removeClass('label label-info').addClass('label label-success');
}
}
localStorage.setItem('tasks', JSON.stringify(tasks));
fetchTasks();
}
如您所见,我添加了 JQuery 行以删除样式并添加新样式,为什么它不起作用?
$("#statusLabel").removeClass('label label-info').addClass('label label-success');
预期的结果,当我单击完成按钮时,标签的文本将从“打开”更改为“完成”,标签的样式也会从“标签标签信息”更改为“标签标签-成功”。
实际结果是,当我点击Complete按钮时,标签的文字从'Open'变成了'Complete',但是标签的样式没有改变,仍然是'label label-info' .
【问题讨论】:
-
有多少个元素有这个ID
statusLabel? -
只有一次。
-
与您的直接问题略微无关,但有两个建议可以使您的代码更好。 1.) 看看 React,你可能会发现它比 jQuery 更好,特别是对于“插入内部 html”类型的工作或 2.) 看看使用模板,如 nunjucks 或车把;这可以让您(几乎)从您的 javascript 中完全删除 html
-
谢谢。喜欢你的建议,我从来没有机会在真正的网络开发人员职位上工作。你给我的建议让我知道我的下一步。
标签: javascript jquery html twitter-bootstrap dom