如果我单击列表项,它会打开和关闭 .done class
If I click on the list item, it toggles the .done class on and off
我想要一个事件,它能穿透我 li
上的文字
我的HTML
<!DOCTYPE html>
<html>
<head>
<title>Javascript + DOM</title>
<link rel="stylesheet" type="text/css" href="5.3 style.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get it done today</p>
<input id="userinput" type="text" placeholder="enter items">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li class="bold red">Jello</li>
<li class="bold red">Spinach</li>
<li class="bold red">Rice</li>
<li class="bold red">Birthday Cake</li>
<li class="bold red">Candles</li>
</ul>
<script type="text/javascript" src="5.2 script.js"></script>
</body>
</html>
我的CSS
.done {
text-decoration: line-through;
}
我的JS
var list = document.getElementsByTagName("li");
list.addEventListener("click", function(e){
list.classList.toggle("done");
})
我试过:
var list = document.querySelector("li");
显然只能得到第一个li,所以我试了
querySelectorAll
它不工作它告诉我错误:
Uncaught TypeError: Cannot read property 'toggle' of undefined"
我使用 document.querySelectorAll
到 select 所有 li
标签。
然后遍历 DOM
个对象的集合并将事件附加到每个对象。
您会注意到我正在使用 click
事件侦听器中的事件来打开 class done
。
希望对您有所帮助
var list = document.querySelectorAll("li");
for(var i = 0; i < list.length; i++) {
list[i].addEventListener("click", function(e){
e.currentTarget.classList.toggle("done");
})
}
.done {
text-decoration: line-through;
}
<!DOCTYPE html>
<html>
<head>
<title>Javascript + DOM</title>
<link rel="stylesheet" type="text/css" href="5.3 style.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get it done today</p>
<input id="userinput" type="text" placeholder="enter items">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li class="bold red">Jello</li>
<li class="bold red">Spinach</li>
<li class="bold red">Rice</li>
<li class="bold red">Birthday Cake</li>
<li class="bold red">Candles</li>
</ul>
<script type="text/javascript" src="5.2 script.js"></script>
</body>
</html>
您需要将 click
侦听器附加到您从 document.getElementsByTagName("li");
获得的所有 li
元素,作为 getElementsByTagName()
returns 您的元素列表使用该标签,您需要将侦听器单独分配给代码中缺少的每个标签,因此出现错误。
var list = document.getElementsByTagName("li");
for(var i=0; i<list.length; i++){
list[i].addEventListener("click", liClick);
}
function liClick(){
this.classList.toggle("done");
}
.done {
text-decoration: line-through;
}
<!DOCTYPE html>
<html>
<head>
<title>Javascript + DOM</title>
<link rel="stylesheet" type="text/css" href="5.3 style.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get it done today</p>
<input id="userinput" type="text" placeholder="enter items">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li class="bold red">Jello</li>
<li class="bold red">Spinach</li>
<li class="bold red">Rice</li>
<li class="bold red">Birthday Cake</li>
<li class="bold red">Candles</li>
</ul>
<script type="text/javascript" src="5.2 script.js"></script>
</body>
</html>
与其向每个 <li>
元素添加一个事件,不如向 <ul>
元素添加一个事件来监视您点击的内容,这将在您将新的待办事项添加到列表中时提供更多帮助
var ul = document.querySelector("ul");
ul.addEventListener("click", function(e){
evt.target.classList.toggle("done");
})
但是在这里你还需要注意你点击的是哪个元素。您可能只是点击了 ul,或者 li 元素内部更深的元素
Javascript 代码如下:
var list = document.querySelectorAll("li");
for(var i = 0; i < list.length; i++) {
list[i].addEventListener("click", liClick);
}
//function to add the 'line through' style
function liClick() {
this.classList.toggle("done");
}
CSS 代码如下:
.done{
text-decoration: line-through;
}
Html 代码如下:
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="stylejs.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get is done today</p>
<input id="userinput" type="text" placeholder="enter to-do">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li>Jello</li>
<li>Spinach</li>
<li>Rice</li>
<li>Birthday cake</li>
<li>Candles</li>
</ul>
<script type="text/javascript" src="learndom.js"></script>
</body>
</html>
我知道您找到了答案,但让我向您展示一种更简洁的方法:
function toggleClassDoneOnAndOff(event) {
if (event.target.tagName === "LI") {
event.target.classList.toggle("done");
}
}
ul.addEventListener("click", toggleClassDoneOnAndOff);
希望你喜欢:)
我想要一个事件,它能穿透我 li
我的HTML
<!DOCTYPE html>
<html>
<head>
<title>Javascript + DOM</title>
<link rel="stylesheet" type="text/css" href="5.3 style.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get it done today</p>
<input id="userinput" type="text" placeholder="enter items">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li class="bold red">Jello</li>
<li class="bold red">Spinach</li>
<li class="bold red">Rice</li>
<li class="bold red">Birthday Cake</li>
<li class="bold red">Candles</li>
</ul>
<script type="text/javascript" src="5.2 script.js"></script>
</body>
</html>
我的CSS
.done {
text-decoration: line-through;
}
我的JS
var list = document.getElementsByTagName("li");
list.addEventListener("click", function(e){
list.classList.toggle("done");
})
我试过:
var list = document.querySelector("li");
显然只能得到第一个li,所以我试了
querySelectorAll
它不工作它告诉我错误:
Uncaught TypeError: Cannot read property 'toggle' of undefined"
我使用 document.querySelectorAll
到 select 所有 li
标签。
然后遍历 DOM
个对象的集合并将事件附加到每个对象。
您会注意到我正在使用 click
事件侦听器中的事件来打开 class done
。
希望对您有所帮助
var list = document.querySelectorAll("li");
for(var i = 0; i < list.length; i++) {
list[i].addEventListener("click", function(e){
e.currentTarget.classList.toggle("done");
})
}
.done {
text-decoration: line-through;
}
<!DOCTYPE html>
<html>
<head>
<title>Javascript + DOM</title>
<link rel="stylesheet" type="text/css" href="5.3 style.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get it done today</p>
<input id="userinput" type="text" placeholder="enter items">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li class="bold red">Jello</li>
<li class="bold red">Spinach</li>
<li class="bold red">Rice</li>
<li class="bold red">Birthday Cake</li>
<li class="bold red">Candles</li>
</ul>
<script type="text/javascript" src="5.2 script.js"></script>
</body>
</html>
您需要将 click
侦听器附加到您从 document.getElementsByTagName("li");
获得的所有 li
元素,作为 getElementsByTagName()
returns 您的元素列表使用该标签,您需要将侦听器单独分配给代码中缺少的每个标签,因此出现错误。
var list = document.getElementsByTagName("li");
for(var i=0; i<list.length; i++){
list[i].addEventListener("click", liClick);
}
function liClick(){
this.classList.toggle("done");
}
.done {
text-decoration: line-through;
}
<!DOCTYPE html>
<html>
<head>
<title>Javascript + DOM</title>
<link rel="stylesheet" type="text/css" href="5.3 style.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get it done today</p>
<input id="userinput" type="text" placeholder="enter items">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li class="bold red">Jello</li>
<li class="bold red">Spinach</li>
<li class="bold red">Rice</li>
<li class="bold red">Birthday Cake</li>
<li class="bold red">Candles</li>
</ul>
<script type="text/javascript" src="5.2 script.js"></script>
</body>
</html>
与其向每个 <li>
元素添加一个事件,不如向 <ul>
元素添加一个事件来监视您点击的内容,这将在您将新的待办事项添加到列表中时提供更多帮助
var ul = document.querySelector("ul");
ul.addEventListener("click", function(e){
evt.target.classList.toggle("done");
})
但是在这里你还需要注意你点击的是哪个元素。您可能只是点击了 ul,或者 li 元素内部更深的元素
Javascript 代码如下:
var list = document.querySelectorAll("li");
for(var i = 0; i < list.length; i++) {
list[i].addEventListener("click", liClick);
}
//function to add the 'line through' style
function liClick() {
this.classList.toggle("done");
}
CSS 代码如下:
.done{
text-decoration: line-through;
}
Html 代码如下:
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="stylejs.css">
</head>
<body>
<h1>Shopping List</h1>
<p id="first">Get is done today</p>
<input id="userinput" type="text" placeholder="enter to-do">
<button id="enter">Enter</button>
<ul>
<li class="bold red" random="23">Notebook</li>
<li>Jello</li>
<li>Spinach</li>
<li>Rice</li>
<li>Birthday cake</li>
<li>Candles</li>
</ul>
<script type="text/javascript" src="learndom.js"></script>
</body>
</html>
我知道您找到了答案,但让我向您展示一种更简洁的方法:
function toggleClassDoneOnAndOff(event) {
if (event.target.tagName === "LI") {
event.target.classList.toggle("done");
}
}
ul.addEventListener("click", toggleClassDoneOnAndOff);
希望你喜欢:)