谈到自定义属性会想到哪个单词呢?
1 .什么是自定义属性
1.1:标准属性: W3C中的标准属性,标签天生自带的属性,浏览器可以识别, 比如class id title等, 可以直接使用点语法操作
1.2 自定义属性: 由程序员自己添加的属性,在DOM对象中找不到, 无法使用点语法操作,必须使用专门的API(用于存储一些数据)
- 设置一个自定义属性:setAttribute('属性名'=,'属性值')
- 获取自定义属性:getAttribute('属性名')
- 删除自定义属性:removeAttribute('属性名')
<div class="box"></div>
<script>
// 获取元素
let box = document.querySelector('.box')
// 设置两个自定义属性
box.setAttribute('name', '张三')
box.setAttribute('age', 18)
//获取name自定义属性
let res = box.getAttribute('name')
console.log(res)
//移除age自定义属性
box.removeAttribute('age')
</script>
设置自定义属性
获取name的自定义属性会得到属性值
移除age的属性
关于自定义属性我们只学了这三个,了解的少之又少,但是再实际开发中用到的极为广泛,比如小米、淘宝、京东任何大网页的HTML的结构里面都能找到,就是H5新增的自定义属性data-
传统的自定义属性没有专门的定义规则,开发者随意定值,不够规范,所以在html5中推出来了专门的data-自定义属性
<div class="box" data-name="andy" data-age="50"></div>
<script>
// 设置自定义属性
let box = document.querySelector('.box')
console.log(box.dataset)
console.log(box.dataset.name)
</script>
自定义属性的最大的好处是一个标签可以添加很多个自定义属性。比较灵活方便 如果一个标签class id属性都被使用了 还想再添加一些属性使用就可以使用自定义属性
dataset得到的是一个自定义属性的集合 分别是data-后面的名字和与之对应的属性值
设置data-格式的自定义属性:元素.dataset.属性名(data-后面的) = 属性值 直接赋值
获取data-格式的方法 : 元素.dataset.属性名 得到data-后面自己定义的名字
获取自己定属性值:元素.dataset.属性名 得到属性值
小案例:
data-属性的妙用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
a {
text-decoration: none;
color: #721c24;
}
h1 {
text-align: center;
color: #333;
margin: 20px 0;
}
table {
margin: 0 auto;
width: 800px;
border-collapse: collapse;
color: #004085;
}
th {
padding: 10px;
background: #cfe5ff;
font-size: 20px;
font-weight: 400;
}
td,
th {
border: 1px solid #b8daff;
}
td {
padding: 10px;
color: #666;
text-align: center;
font-size: 16px;
}
tbody tr {
background: #fff;
}
tbody tr:hover {
background: #e1ecf8;
}
.info {
width: 900px;
margin: 50px auto;
text-align: center;
}
.info input {
width: 80px;
height: 25px;
outline: none;
border-radius: 5px;
border: 1px solid #b8daff;
padding-left: 5px;
}
.info button {
width: 60px;
height: 25px;
background-color: #004085;
outline: none;
border: 0;
color: #fff;
cursor: pointer;
border-radius: 5px;
}
.info .age {
width: 50px;
}
</style>
</head>
<body>
<h1>新增学员</h1>
<div class="info">
姓名:<input type="text" class="uname">
年龄:<input type="text" class="age">
性别: <select name="gender" id="" class="gender">
<option value="男">男</option>
<option value="女">女</option>
</select>
薪资:<input type="text" class="salary">
就业城市:<select name="city" id="" class="city">
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="广州">广州</option>
<option value="深圳">深圳</option>
<option value="曹县">曹县</option>
</select>
<button class="add">录入</button>
</div>
<h1>就业榜</h1>
<table>
<thead>
<tr>
<th>学号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>薪资</th>
<th>就业城市</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<!-- <tr>
<td>1001</td>
<td>欧阳霸天</td>
<td>19</td>
<td>男</td>
<td>15000</td>
<td>上海</td>
<td>
<a href="javascript:">删除</a>
</td>
</tr> -->
</tbody>
</table>
<script>
let arr = [{
stuId: 1001,
uname: '欧阳霸天',
age: 19,
gender: '男',
salary: '20000',
city: '上海'
},
{
stuId: 1002,
uname: '令狐霸天',
age: 29,
gender: '男',
salary: '30000',
city: '北京'
},
{
stuId: 1003,
uname: '诸葛霸天',
age: 39,
gender: '男',
salary: '2000',
city: '北京'
},
]
let tbody = document.querySelector('tbody')
let uname = document.querySelector('.uname')
let age = document.querySelector('.age')
let gender = document.querySelector('.gender')
let salary = document.querySelector('.salary')
let city = document.querySelector('.city')
let add = document.querySelector('.add')
// 封装渲染函数
function render() {
tbody.innerHTML = ''
for (let i = 0; i < arr.length; i++) {
// 创建tr
let tr = document.createElement('tr')
// 添加内容
tr.innerHTML = `
<td>${arr[i].stuId}</td>
<td>${arr[i].uname}</td>
<td>${arr[i].age}</td>
<td>${arr[i].gender}</td>
<td>${arr[i].salary}</td>
<td>${arr[i].city}</td>
<td>
<a href="javascript:" data-id="${i}">删除</a>
</td>
`
// 追加到dom树
tbody.appendChild(tr)
}
}
// 封装好之后调用 直接渲染到页面
render()
add.addEventListener('click', function () {
// 非空判断
if (uname.value.trim() == '' || age.value.trim() == '' || salary.value.trim() == '') {
alert('请输入内容')
} else { //增加内容
arr.push({
stuId: arr[arr.length - 1].stuId + 1,
uname: uname.value,
age: age.value,
gender: gender.value,
salary: salary.value,
city: city.value
})
}
// 封装好之后调用 直接渲染到页面
render()
// 清空表单
uname.value = age.value = salary.value = ''
gender.value = '男'
city.value = '北京'
})
// 注册点击事件 利用事件委托
tbody.addEventListener('click', function (e) {
// 判断点击的是否是删除按钮a标签
if (e.target.tagName === 'A') {
arr.splice(e.target.dataset.id, 1)
render()
}
})
</script>
</body>
</html>