classList.add 不起作用
2014-02-23
63581
我正在尝试使用 JavaScript 制作一个简单的待办事项列表。基本上,您在输入字段中输入一个项目,它会被添加到列表中,如果已完成,则单击它,然后它就会被划掉。如果您单击已经划掉的列表,则会删除该行。但是,虽然删除一行有效,但添加一条划掉的线却不起作用。
HTML:
<div><input type="text" value="" id="new_task"><button id="add_task">Add Task</button></div>
<ul id="tasks">
<li class="completed selected">One Task</li>
<li>Two Task</li>
</ul>
CSS:
<style type="text/css" media="screen">
/*local styles if any (quick tests and local only overrides)*/
#tasks li{
list-style: none;
}
#tasks .selected{
list-style: disc;
}
.completed{
text-decoration: line-through;
}
</style>
JavaScript:
<script type="text/javascript" charset="utf-8">
var inputField = document.querySelector("#new_task");
var myButton = document.querySelector("#add_task");
var taskList = document.querySelector("#tasks");
var newList = document.createElement("li");
var completeTask = document.querySelector("li.completed.selected");
var incompleteTask = document.querySelector("li:not([class])");
myButton.onclick = function() {
taskList.appendChild(newList);
newList.innerHTML = inputField.value;
inputField.value = "";
}
completeTask.onclick = function() {
event.target.classList.remove("completed","selected");
}
incompleteTask.onclick = function() {
event.target.classList.add("completed","selected");
}
</script>
3个回答
您可以简单地使用
classList
的
toggle
方法来交换
li
的类。只需选择所有
li
并将其点击事件处理程序设置为切换类的函数即可。
function ch() {
this.classList.toggle("completed");
this.classList.toggle("selected");
}
var items = document.querySelectorAll('li');
for (var x = items.length - 1; x >= 0; x--){
items[x].onclick = ch;
}
Musa
2014-02-24
脚本仅解析文档一次,并且
document.querySelector("li.completed.selected")
返回一个节点。因此,删除这些类仅适用于在脚本解析时具有这些类的
One Task
。
您需要手动将
onclick
处理程序添加到创建的每个项目中,请参阅
jsFiddle
。
var inputField = document.querySelector("#new_task");
var myButton = document.querySelector("#add_task");
var taskList = document.querySelector("#tasks");
var lis = document.querySelectorAll("#tasks li");
function clickHandler() {
if(event.target.classList.contains("completed"))
event.target.classList.remove("completed","selected");
else
event.target.classList.add("completed","selected");
}
// add onclick handler to existing nodes
for(var i=0; i<lis.length; ++i) lis[i].onclick = clickHandler;
myButton.onclick = function() {
var newList = document.createElement("li");
taskList.appendChild(newList);
newList.innerHTML = inputField.value;
inputField.value = "";
// add onclick handler to new nodes
newList.onclick = clickHandler;
}
Jan Turoň
2014-02-23
var element:any = document.querySelector('.' + ele[0].toUpperCase().toString())
console.log(element)`enter code here`
setTimeout(() => {
element.classList.add('classname');
}, 500);
我刚刚为此使用了 setTime out,并且工作正常。
venkatesh M
2022-11-25