js排他思想以及相关案例
- 首先先排除其他人,然后才设置自己的样式 这种排除其他人的思想我们称为排他思想
<body>
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
<script>
//1.获取所有·按钮元素
var btns = document.getElementsByTagName('button');
//btns 得到的是伪数组 里面的每一个元素 btns[i]
for(var i = 0; i<btns.length; i++){
btns[i].onclick = function(){
//(1)我们先把所有的按钮背景颜色去掉 干掉所有人
for(var i=0; i<btns.length;i++){
btns[i].style.backgroundColor = '';
}
//(2)然后才让当前的元素背景颜色为pink 留下我自己
this.style.backgroundColor = 'pink';
}
}
</script>
</body>
案例:换肤效果
案例分析
①这个案例练习的是给一组元素注册事件
②给4个小图片利用循环注册点击事件
③当我们点击了这个图片,让我们页面背景改为当前的图片
④核心算法:把当前图片的src路径取过来,给body做为背景即可
<style>
*{
margin: 0;
padding: 0;
}
body{
background: url(../images/1.jpg) no-repeat center top;
}
li{
list-style: none;
}
.baidu{
overflow: hidden;
margin: 100px auto;
background-color: #fff;
width: 410px;
padding-top: 3px;
}
.baidu img{
width: 100px;
}
</style>
</head>
<body>
<ul class="baidu">
<li><img src="../images/1.jpg"></li>
<li><img src="../images/2.jpg"></li>
<li><img src="../images/3.jpg"></li>
<li><img src="../images/4.jpg"></li>
</ul>
<script>
//1.获取元素
var imgs = document.querySelector('.baidu').querySelectorAll('img');
//2.循环注册事件
for(var i=0; i<imgs.length; i++){
imgs[i].onclick = function(){
//把这个路径 this.src给body 就可以了
document.body.style.backgroundImage = 'url('+ this.src +')';
}
}
</script>
</body>
案例:表格隔行变色
案例分析:
①用到新的鼠标事件鼠标经过onmouseover鼠标离开 onmouseout
②核心思路:鼠标经过tr行,当前的行变背景颜色,鼠标离开去掉当前的背景颜色
③注意:第一行(thead里面的行)不需要变换颜色,因此我们获取的是tbody里面的行
<script>
//1.获取元素 获取的是tbody里面所有的行
var trs = document.querySelector('tbody').querySelectorAll('tr');
//2.利用循环绑定注册事件
for(var i=0; i<trs.length;i++){
//3.鼠标经过事件 onmouseover
trs[i].onmouseover = function(){
this.className = 'bg';
}
//4.鼠标离开事件 onmouseout
trs[i].onmouseover = function(){
this.className = '';
}
}
</script>
案例:表单全选取消案例
案例分析:
①全选和取消全选做法:让下面所有复选框的checked属性(选中状态)跟随全选按钮即可
②下面复选框需要全部选中,上面全选才能选中做法:给下面所有复选框绑定点击事件,每次点击,都要循环查看下面所有的复选框是否有没选中的,如果有一个没选中的, 上面全选就不选中。
<script>
//1.获取元素
var j_cbAll = document.getElementById('j_cbAll'); //全选按钮
var j_tbs = document.getElementById('j_tb').getElementsByTagNameNS('input'); //下面所有的复选框
//注册事件
j_cbAll.onclick = function(){
//this . checked它可以得到当前复选框的选中状态如果是true就是选中,如果是false就是未选中
console.log(this.checked);
for(var i=0;i<j_tbs.length;i++){
j_tbs[i].checked=this.checked;
}
}
// 2.下面复选框需要全部选中, 上面全选才能选中做法: 给下面所有复选框绑定点击事件,每次点击,都要循环
for(var i=0;i<j_tbs.length;i++){
j_tbs[i].onclick = function(){
//flag控制全选按钮是否选中
var flag = true;
//每次点击下面的复选框都要循环检查这4个小按钮是否全被选中
for(var i=0;i<j_tbs.length;i++){
if(!j_tbs[i].checked){
flag = false;
break;//退出for循环 这样可以提高执行效率 因为只要有一个没选中,剩下的就无需循环判断
}
}
j_cbAll.checked = flag;
}
}
</script>