116 lines
3.4 KiB
HTML
116 lines
3.4 KiB
HTML
![]() |
<!DOCTYPE html>
|
|||
|
<html>
|
|||
|
<head>
|
|||
|
<meta charset="UTF-8">
|
|||
|
<title></title>
|
|||
|
<style>
|
|||
|
* {
|
|||
|
margin: 0;
|
|||
|
padding: 0;
|
|||
|
}
|
|||
|
#fruits {
|
|||
|
width: 120px;
|
|||
|
margin: 20px 20px;
|
|||
|
}
|
|||
|
#fruits>li {
|
|||
|
list-style-type: none;
|
|||
|
height: 40px;
|
|||
|
color: white;
|
|||
|
background-color: #009966;
|
|||
|
line-height: 40px;
|
|||
|
text-align: center;
|
|||
|
margin-top: 2px;
|
|||
|
}
|
|||
|
#fruits>li>a {
|
|||
|
float: right;
|
|||
|
color: white;
|
|||
|
text-decoration: none;
|
|||
|
}
|
|||
|
#fruits~input {
|
|||
|
border: none;
|
|||
|
outline: none;
|
|||
|
text-align: center;
|
|||
|
margin: 20px 15px;
|
|||
|
}
|
|||
|
input[type=text] {
|
|||
|
border-bottom: 1px solid gray !important;
|
|||
|
}
|
|||
|
#ok {
|
|||
|
width: 80px;
|
|||
|
height: 30px;
|
|||
|
background-color: #CC3333;
|
|||
|
color: white;
|
|||
|
}
|
|||
|
</style>
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
<div id="container">
|
|||
|
<ul id="fruits">
|
|||
|
<li>苹果<a href="">×</a></li>
|
|||
|
<li>香蕉<a href="">×</a></li>
|
|||
|
<li>火龙果<a href="">×</a></li>
|
|||
|
<li>西瓜<a href="">×</a></li>
|
|||
|
</ul>
|
|||
|
<input type="text" name="fruit">
|
|||
|
<input id="ok" type="button" value="确定">
|
|||
|
</div>
|
|||
|
<script>
|
|||
|
function addListItem() {
|
|||
|
let name = input.value.trim()
|
|||
|
if (name) {
|
|||
|
// 通过document对象的createElement方法创建新元素
|
|||
|
let li = document.createElement('li')
|
|||
|
// 可以用textContent或innerHTML属性来修改标签的内容
|
|||
|
li.innerHTML = name
|
|||
|
let a = document.createElement('a')
|
|||
|
a.innerHTML = '×'
|
|||
|
a.href = ''
|
|||
|
a.addEventListener('click', removeListItem)
|
|||
|
li.appendChild(a)
|
|||
|
// 通过父元素的appendChild或insertBefore可以添加子元素
|
|||
|
ul.appendChild(li)
|
|||
|
input.value = ''
|
|||
|
// 元素的focus和blur方法可以让元素获得或失去焦点
|
|||
|
input.focus()
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function removeListItem(evt) {
|
|||
|
// evt.stopPropagation()
|
|||
|
// 通过事件对象的preventDefault方法阻止事件的默认行为
|
|||
|
evt.preventDefault()
|
|||
|
// 通过元素获取父元素 - parentNode
|
|||
|
// 通过元素获取子元素 - children / firstElementChild / lastElementChild
|
|||
|
// 通过元素获取兄弟元素 - previousElementSibling / nextElementSibling
|
|||
|
let li = evt.target.parentNode
|
|||
|
// 通过父元素的removeChild方法可以删除指定的子元素
|
|||
|
ul.removeChild(li)
|
|||
|
}
|
|||
|
|
|||
|
const ul = document.querySelector('#fruits')
|
|||
|
const input = ul.nextElementSibling
|
|||
|
input.addEventListener('keypress', (evt) => {
|
|||
|
let code = evt.keyCode || evt.which
|
|||
|
if (code == 13) {
|
|||
|
addListItem()
|
|||
|
}
|
|||
|
})
|
|||
|
const ok = input.nextElementSibling
|
|||
|
ok.addEventListener('click', addListItem)
|
|||
|
let anchors = document.querySelectorAll('#fruits>li>a')
|
|||
|
for (let i = 0; i < anchors.length; i += 1) {
|
|||
|
// addEventListener方法有三个参数
|
|||
|
// 第一个参数是事件的名称,例如: click / dbclick / mouseover / mouseout
|
|||
|
// 第二个参数是事件发生时要执行的回调函数,函数的参数是事件对象:
|
|||
|
// ~ 传入一个已有函数的名字
|
|||
|
// ~ 写一个匿名函数 function(evt) {}
|
|||
|
// ~ 写一个箭头函数 (evt) => {}
|
|||
|
// 第三个参数表示使用事件捕获还是事件冒泡,如果不写表示事件冒泡(从里向外传播事件)
|
|||
|
// ~ 如果设置为true表示事件捕获(从外向里传播事件)
|
|||
|
// ~ 如果希望阻止事件的传播行为可以调用事件对象的stopPropagation方法
|
|||
|
anchors[i].addEventListener('click', removeListItem)
|
|||
|
}
|
|||
|
</script>
|
|||
|
</body>
|
|||
|
</html>
|