Dom中的节点都是对象,通过Tolist留言删除 、模拟数组数据填充到表格中俩个小案例,熟悉DOM操作,包括准确找到节点,父节点添加子节点,删除节点,创建节点,给节点添加文本子节点内容,获取子节点数,还有数组遍历方法forEach。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Tolist添加和删除功能</title>
</head>
<body>
<!-- 留言板实现 添加删除功能 -->
<h3>留言板</h3>
<input type="text">
<ul></ul>
<!-- 通过js实现 -->
<script>
// 获取input节点
var comment = document.querySelector('input');
//获取节点ul
var ul = document.getElementsByTagName('ul')[0];
//自动获得焦点
comment.focus();
//给input添加按键按下的事件
comment.onkeydown=function (event) {
// 判断是不是按下的回车
// 添加删除功能 给li里面添加点击事件 然后调用del函数
if (event.keyCode === 13) {
// 创建一个li节点
var li = document.createElement('li');
// li节点下的文本内容就是input里的value属性值
li.innerHTML = comment.value + "<a href='javascript:;' onclick='del(this)'>删除</a>";
// 判断如果ul下为空li是第一条 那么就添加在ul下面否则就添加到li里的第一条
if (ul.childElementCount === 0) {
// 将li节点添加到ul下面
ul.appendChild(li);
// 留言成功后把input清空
comment.value = "";
} else {
// 获取到目前子节点的第一条
var first = ul.firstElementChild;
// 添加到现有子节点的前面
ul.insertBefore(li, first);
}
}
}
// 删除函数
function del(ele) {
// 先进性确认 确认返回true
if (confirm('是否删除')) {
// 要删除li 先调用li节点
var li = ele.parentNode;
//li采用 removechild要先找到上面的父节点在删除自己
li.parentNode.removeChild(li);
}
// 返回false初始化
return false;
}
</script>
</body>
</html>点击 "运行实例" 按钮查看在线实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js动态获取数据填入表格</title>
<style>
table,th,td{
border: 1px solid #666;
}
table {
width: 500px;
text-align: center;
border-collapse: collapse;
}
table caption {
font-size: 1.2rem;
margin-bottom: 15px;
}
/* 这里必须在nth-of-type(1)前添加父元素,否则thead,tbody中的第一行都会生效 */
thead tr:nth-of-type(1) {
background-color: lightblue;
}
</style>
</head>
<body>
<table id="cart2">
<caption>购物车2</caption>
<thead>
<tr>
<th>编号</th>
<th>品名</th>
<th>数量</th>
<th>单价</th>
</tr>
</thead>
<tbody></tbody>
</table>
<hr>
<table id="cart3">
<caption>购物车2</caption>
<thead>
<tr>
<th>编号</th>
<th>品名</th>
<th>数量</th>
<th>单价</th>
</tr>
</thead>
<tbody></tbody>
</table>
<!-- js添加数据 -->
<script>
// 模拟一组数组数据
var date = [
{id: 1, name: '牛奶', count: 3, price: 50},
{id: 2, name: '苹果', count: 10, price: 80},
{id: 3, name: '衣服', count: 2, price: 600}
];
// 获取cart2
var cart2 = document.getElementById('cart2');
// 获取到tbody
var tbody = cart2.children[2];
// 数组遍历数据方法
date.forEach(function (value) {
// 创建tr
var tr = document.createElement('tr');
// 将数据添加到tr里面
tr.innerHTML = '<td>'+value.id+'</td>';
tr.innerHTML += '<td>'+value.name+'</td>';
tr.innerHTML += '<td>'+value.count+'</td>';
tr.innerHTML += '<td>'+value.price+'</td>';
// tbody添加子节点
tbody.appendChild(tr);
});
// 用另外一种方法
// 获取cart3
var cart3 = document.getElementById('cart3');
// 获取到tbody
var tbody = cart3.children[2];
// 用for循环遍历出数组下的三个对象值
for (var i=0;i<date.length;i++) {
// 通过循环分别创建一次相对应的tr
var tr = document.createElement('tr');
// 获取每个对象里的键组成新的数组,遍历这个数组通过键获取键值然后给到tr下
Object.keys(date[i]).forEach(function (key) {
tr.innerHTML += '<td>'+date[i][key]+'</td>';
// tbody添加子节点
tbody.appendChild(tr);
});
}
</script>
</body>
</html>点击 "运行实例" 按钮查看在线实例
总结:
1、操作DOM的前提就是要找准节点,这里可以用标签(getElementsByTagName('a')[0])、ID(getElementById(‘a’))、class(getElementsByClassName('a')[0])、表单中的name(getElementsByName('a'))以上都是可以动态实时反映变化;css获取时静态的(querySelector('h3')只返回第一个值,querySelectorAll(‘a’)【0】)
2、留言板功能实现主要时要找到ul节点然后创建li节点,通过将input的value值传递给li的子文本节点。删除功能中需要注意的是,但删除一个节点是可以通过parentNode找的父节点在删除子节点removeChild();功能——最后的留言在最前面的实现是,先判断如果ul下的节点数为0那么就用appendChild插入子节点,如果不为0那么就在第一个子元素(firstElement)前添加insertBefore.
3、把数组数据用js填入表格功能,首先要知道table自动生成tbody,要先找到table,然后他的第三个子元素tbody,然后是tbody下的tr;数组里面实际上是对象,通过forEsch()方法遍历出来,然后调用里面的属性值得相应的数据,在填充到tr然后在添加到tbody
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号