DOM(二)
一、排他操作
1、排他思想简介
排他思想,简单理解就是排除掉其他的(包括自己),然后再给自己设置想要实现的效果。总而言之,排他思想的实现步骤就是所有元素全部清除与设置当前元素
案例1演示:在同一组元素中,想要某一个元素实现某种样式,使用循环的排他思想算法来实现
⑤编写HTML结构代码
<body>
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
</body>
②编写JS代码,单击按钮,改变当前按钮背景色
<script>
// 1. 获取所有按钮元素, btns得到的是类数组对象
var btns = document.getElementsByTagName('button');
for (var i = 0; i < btns.length; i++) { // 里面的每一个元素btns[i]
btns[i].onclick = function () {
for (var i = 0; i < btns.length; i++) { // (1) 先把所有的按钮背景颜色去掉
btns[i].style.backgroundColor = '';
}
this.style.backgroundColor = 'pink'; // (2) 然后设置当前的元素背景颜色
}
}
案例2:鼠标经过时背景变色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
.bg{
background-color: blueviolet;
}
</style>
<body>
<table border="1" align="center">
<thead>
<tr>
<th width='80'>代码</th>
<th width='100'>名称</th>
<th width='100'>最新公布净值</th>
<th width='100'>累计净值</th>
<th width='100'>前单位净值</th>
<th width='100'>净值增长率</th>
</tr>
</thead>
<tbody>
<tr align="center">
<td>002143</td>
<td>定期开放债券</td>
<td>1.352</td>
<td>1.962</td>
<td>1.306</td>
<td>+0.353%</td>
</tr>
<tr align="center">
<td>002143</td>
<td>定期开放债券</td>
<td>1.352</td>
<td>1.962</td>
<td>1.306</td>
<td>+0.353%</td>
</tr>
<tr align="center">
<td>002143</td>
<td>定期开放债券</td>
<td>1.352</td>
<td>1.962</td>
<td>1.306</td>
<td>+0.353%</td>
</tr>
<tr align="center">
<td>002143</td>
<td>定期开放债券</td>
<td>1.352</td>
<td>1.962</td>
<td>1.306</td>
<td>+0.353%</td>
</tr>
</tbody>
</table>
<script>
var trs = document.querySelector('tbody').querySelectorAll('tr') //获取tbody下的所有行
for(var i = 0;i < trs.length;i++){
trs[i].onmouseover = function(){
this.className = 'bg';
}
trs[i].onmouseout = function(){
this.className = '';
}
}
</script>
</body>
</html>
二、属性操作
1、获取属性值
- 获取元素的内置属性值:element.属性 或 getAttribute(‘属性’)
- 获取元素的自定义属性值:getAttribute(‘属性’)
<body>
<p id="p1" class="ps" value='asda' title="asf">邮电大学</p>
<script>
var pt = document.querySelector('p')
console.log(pt.id)
console.log(pt.title)
console.log(pt.getAttribute('value'))
console.log(pt.getAttribute('class'))
console.log(pt.getAttribute('id'))
</script>
</body>
2、设置属性值
- 设置内置属性的值:element.属性 = 值
- 设置自定义属性的值:setAttribute(‘属性’,‘值’)
<body>
<div></div>
<script>
var div = document.querySelector('div');
div.id = 'test'; // 设置id值为test
div.className = 'navs'; // 设置class类名为navs
div.setAttribute('index', 2); // 设置属性名为index,值为2
</script>
</body>
另外,也可以使用setAttribute()方式设置元素的类名
div.setAttribute('class', 'footer');//class为类名,footer为属性名
3、移除属性值:element.removeAttribute(‘属性’)
<style>
.tt{
width: 100px;
height: 100px;
background-color: blue;
color: chartreuse;
}
</style>
<body>
<div class="tt">万里长城</div>
<button id="btn">移除属性</button>
<script>
var dt = document.querySelector('div')
// dt.id = 'd1'
// // dt.className = 'df'
// dt.setAttribute('index','3')
// dt.setAttribute('class','tt')
btn.onclick = function(){
dt.removeAttribute('class')
}
</script>
</body>
4、案例:Tab栏切换
标签栏在网站中的使用非常普遍,它的优势在于可以在有限的空间内展示多块的内容,用户可以通过标签在多个内容块之间进行切换
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style-type: none;
}
.tab {
width: 978px;
margin: 100px auto;
}
.tab_list {
height: 39px;
border: 1px solid #ccc;
background-color: #f1f1f1;
}
.tab_list li {
float: left;
height: 39px;
line-height: 39px;
padding: 0 20px;
text-align: center;
cursor: pointer;
}
.tab_list .current {
background-color: #c81623;
color: #fff;
}
.item_info {
padding: 20px 0 0 20px;
}
.item {
display: none;
}
</style>
</head>
<body>
<div class="tab">
<div class="tab_list">
<ul>
<li class="current">商品介绍</li>
<li>规格与包装</li>
<li>售后保障</li>
<li>商品评价(50000)</li>
<li>手机社区</li>
</ul>
</div>
<div class="tab_con">
<div class="item" style="display: block;">商品介绍模块内容</div>
<div class="item">规格与包装模块内容</div>
<div class="item">售后保障模块内容</div>
<div class="item">商品评价(50000)模块内容</div>
<div class="item">手机社区模块内容</div>
</div>
</div>
<script>
// 获取标签部分的所有元素对象
var tab_list = document.querySelector('.tab_list');
var lis = tab_list.querySelectorAll('li');
// 获取内容部分的所有内容对象
var items = document.querySelectorAll('.item');
for (var i = 0; i < lis.length; i++) { // for循环绑定点击事件
lis[i].setAttribute('index', i); // 开始给5个小li设置索引号
lis[i].onclick = function () {
for (var i = 0; i < lis.length; i++) {
lis[i].className = '';
}
this.className = 'current';
// 下面的显示内容模块
var index = this.getAttribute('index');
for (var i = 0; i < items.length; i++) {
items[i].style.display = 'none';
}
items[index].style.display = 'block';
};
}
</script>
</body>
</html>
三、H5中自定义属性
HTML5新增了自定义属性的规范,在HTML5中规定通过“data-属性名”的方式设置自定义属性
<div data-index='2'></div> -->H5的写法,'data-'是自定义属性的前缀,便于区分自定义属性和内置属性
<div id="dt" index='2'></div> -->H5以前版本的写法
1、设置属性值
元素对象名.dataset.属性名 = 值
元素的“data-*”自定义属性有两种设置方式,分别如下
①在HTML中设置自定义属性
// 在div元素上设置data-index属性
<div data-index="2"></div> //data-表示前缀,index是自己定义的属性名
②在JavaScript中设置自定义属性
在JavaScript代码中,可以通过setAttribute(‘属性’, 值)或者“元素对象.dataset.属性名=‘值’”两种方式设置自定义属性。需要注意的是,通过后者的方式只能设置以“data-”开头的自定义属性
<body>
<div class="div" data-index="5"></div>
<div id="pt" getTime="20" data-index="2" data-list-name="andy"></div>
<script>
var dt = document.querySelector('.div')
var pt = document.querySelector('#pt')
dt.dataset.name = '张三' //自定义属性data-name
// dt.setAttribute('data-index','2') //自定义属性data-index
console.log(dt.dataset.index)
console.log(pt.dataset['index'])
</script>
</body>
2、获取属性值
- 对象名.dataset.属性(有兼容性问题)
- 对象名.dataset[‘属性’](有兼容性问题)
- getAttribute(‘属性’)
<div getTime="20" data-index="2" data-list-name="andy"></div>
<script>
var div = document.querySelector('div');
console.log(div.getAttribute('data-index')); // 结果为:2
console.log(div.getAttribute('data-list-name')); // 结果为:andy
// HTML5新增的获取自定义属性的方法,只能获取“data-”开头的属性
console.log(div.dataset); // DOMStringMap {index:"2",listName:"andy"}
console.log(div.dataset.index); // 结果为:2
console.log(div.dataset['index']); // 结果为:2
console.log(div.dataset.listName); // 结果为:andy
console.log(div.dataset['listName']); // 结果为:andy
</script>
注:dataset是一个集合,里面存放了所有以data开头的自定义属性,如果自定义属性里面包含有多个连字符(-)时,获取的时候采取驼峰命名法
本文详细介绍了在HTML5中如何利用排他思想实现按钮背景切换、鼠标悬停效果,并讲解了属性操作,包括获取和设置内置与自定义属性,以及移除属性。此外,还展示了如何在Tab栏切换中运用这些技巧,以及H5中自定义属性的正确使用和获取方法。
2140

被折叠的 条评论
为什么被折叠?



