先总结一下操作元素的知识点
排他思想
今天学习的是排他思想,具体表现为什么呢?
就比如这个轮播图,当我们选择了特定的元素时样式才会改变,而其他的不变,返回原来的状态
我们试着用按钮模拟一下,当我们点击了哪一个,哪一个按钮的背景颜色就变成粉色.
一开始是这样写的,让我们看看会有什么问题
我们会发现我们在点击别的按钮的时候,原来被按下的按钮并不会还原,这时候就体现出排他思想的作用了.
解决的思路:
1.在按下其他按钮前,先还原原来的背景色
2.然后再设置我们当前按下的按钮的背景颜色
所以我们再写一个循环,遍历所有的元素,将他们的背景色都还原:
想要背景颜色不变就让backgroundcolor = ' '就可以了.
现在又要做一个百度换肤的小案例啦,说实话每次要做案例的时候都有点点小痛苦哈哈哈~但是可以让我们更好的掌握,不知道以后没有老师了自己怎么做案例...
分析:
老师的做法:
获取图片路径的地方非常巧妙
一开始我想到更换body背景图片的方法只有
document.body.style.backgroundImage = `url(./images/${i 1}.jpg)`
但是后来我发现这是行不通的,因为会报错,报错原因是没有./images/5.jpg这张图片,后来我换成了 url(./images/${i}.jpg) 我发现无论点击哪张照片出来的背景图片都是最后一张,冥思苦想了很久!!!于是去网上找了找资料,才知道这里是有问题的:
就是因为i被提升为了全局变量,所以onclick的时候只能求到最后一个循环到的值,那就是我的例子中的4,所以i 1的时候会报错,所以i的时候会一直显示最后一张照片.
当然也是有解决办法的,目前我会的:
- 将var换成let.
- 将值在每次遍历循环以后先赋值保存下来,令i = i.
这样效果也是一样的.
隔行变色案例(重点)
分析:
- 用到新的鼠标事件
鼠标经过: onmouseover 鼠标离开: onmouseout
- 核心思路: 鼠标经过tr行,当前的行变背景颜色,鼠标离开去掉当前的背景颜色.
接下来是一个非常常见的案例, 下面的框框是多选框,如果把商品全部选中,那么全选框会打上勾,如果取消掉其中一个,全选框的勾勾会消失
我们要分成两大块来做:
经历千辛万苦我终于做出来了!一开始跟着老师做的,但是电脑抽风了,明明写的代码是对的就是不执行...
代码语言:javascript复制 <script>
var all = document.getElementById('j_cbAll'); // 全选框
var select = document.getElementById('j_tb').querySelectorAll('input');
// 第一块 全选反选
all.onclick = function () {
if (this.checked == true) {
for (var i = 0; i < select.length; i ) {
select[i].checked = true;
}
} else {
for (var i = 0; i < select.length; i ) {
select[i].checked = false;
}
}
}
// 第二块
var flag = 0;
for (let i = 0; i < select.length; i ) {
select[i].onclick = function () {
if (select[i].checked) {
flag
if (flag == 4) {
all.checked = true;
}
}
if (select[i].checked == false) {
flag--
all.checked = false;
}
console.log(flag);
}
}
</script>
自定义属性的操作
获取属性值
我们之前获取元素的方式是element.属性值.
现在我们学习新的获取属性值的方法: element.getAttribute('属性')
区别:
- element.属性: 获取内置属性值(元素本身自带的属性)
- element.getAttribute('属性'): 主要获取自定义的属性(标准),程序员自定义的属性.
其实div里面是可以自定义属性的,比如我们已经用过class了,我们现在自己给他添加一个index属性,然后用getAttribute获取:
设置属性值
- element.属性 = '值'
- element.setAttribute('属性','值') 主要针对于自定义属性
如果想要修改它的class,必须这么写: box.className = 'navs'
移除属性
element.removeAttribute('属性')
切换tab栏案例(重要)
我们先来看看结构:
JS部分:
看看效果,一会自己动手再做一遍:
刚刚自己从头做了一遍,疯狂出错,一次是tab_con漏了'_',一次是length单词打错了,话说vscode的提示也太少了!!!
H5自定义属性
自定义属性目的:是为了保存并使用数据.有些数据可以保存到页面中而不用保存到数据中.
自定义属性是通过getAttribute('属性')获取的.
但是有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性.
H5给我们增加了自定义属性:
1.设置H5自定义属性
H5规定自定义属性'data-'开头作为属性名并且赋值
比如<div data-index = '1'></div>
2.获取H5自定义属性
- 兼容性获取 element.getAttribute('data-index');
- H5新增 element.dataset.index 或者 element.dataset['index'] IE11才开始支持,但是如果自定义属性里面有多个'-'链连接的词,我们获取的时候要使用驼峰命名法.比如:
div.setAttribute('data-user-gender',
'male') console.log(div.dataset.userGender);