本文章讲述的DOM的一些使用
一、节点的查询和遍历:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1 id="dom">DOM document Object Model</h1>
<p>你好1</p>
<p>你好2</p>
<p>你好3</p>
<h1>dom的节点查询</h1>
<form action="">
爱好:<br>
<input type="checkbox" name="fav" id="">lol <br>
<input type="checkbox" name="fav" id="">dnf <br>
<input type="checkbox" name="fav" id="">麻将 <br>
</form>
<script>
// 节点的遍历,就是把获到的节点列表挨个输出
// 01 for 循环来遍历
var ps = document.getElementsByTagName("p");
// for(var i = 0; i<ps.length;i++){
// console.log(ps[i],ps[i].innerText);
// }
// 02 转换为数组后forEach
// Array.from()把类数组元素转换为数组
// foreach数组的高阶函数(遍历),传入一个回调函数function
// 数组元素有多少个 function就会执行多少次
// elem 当前被遍历的元素
var arr = Array.from(ps)
arr.forEach(function(elem){
console.log(elem,elem.innerText)
})
</script>
</body>
</html>
二、queryselsctor(选择器)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
</style>
</head>
<body>
<h1 id="dom">queryselsctor</h1>
<div>
<p>你好1</p>
<p>你好2</p>
<p>你好3</p>
<p class="four">你好4</p>
<p>你好5</p>
</div>
<script>
// queryselsctor通过css选择器的方式去查询节点
// query查询 selector选择器
var p = document.querySelector("div .four");
console.log(p,p.innerHTML);
// 选择节点非常方便,填写Css选择器
var p2 = document.querySelector("div p:last-of-type");
console.log(p2,p2.innerHTML);
// querySelectorAll 通过css选择器获取节点列表
var ps = document.querySelectorAll("div p:not(.four)");
ps.forEach(function(item){
console.log(item.innerText);//遍历节点
// innerText 元素的文本内容
})
</script>
</body>
</html>
三、更改层内容
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button type="button" onclick="changeIt()">更改层内容</button>
<div>
我喜欢xxx
</div>
<input type="text" value="人生苦短"/>
<button type="button" onclick="changeInp()"> 改变文本框的内容</button>
<script>
function changeInp(){
var input = document.querySelector("input");
// value 获取/设置文本框的值
input.value = "学前端,月薪过万!";
}
function changeIt(){
var div = document.querySelector("div");
// 修改div的内容文本
// innerText 获取/设置元素文本内容(除html标签)
// div.innerText = "我还是喜欢<strong>xxx</strong>";
// innerHTML 获取/设置元素的html内容
div.innerHTML = "我还是喜欢<strong>xxx</strong>";
}
</script>
</body>
</html>
四、访问页面元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<input type="text" value="春" name="season" />
<input type="text" value="夏" name="season" />
<input type="text" value="秋" name="season" />
<input type="text" value="冬" name="season" /><br/>
<input type="button" value="显示input内容" onclick="showInput()" />
<input type="button" value="显示season内容" onclick="showSeason()" />
<div id="tip">
</div>
<script type="text/javascript">
function showSeason(){
var str = "";//用来存储每个season的值
// 获取到所有的季节
var seasons = document.getElementsByName("season");
// 遍历seasons
seasons.forEach(function(item){
// 累计追加每个input的值
str+=item.value+"<br/>";
})
var tip = document.getElementById("tip");
// 设置tip的文本
tip.innerHTML = str;
}
function showInput(){
var str = "";//存储每个input里面的值
// 获取所有input节点
var inps = document.querySelectorAll("input");
// 遍历inps 把value追加到 str里面
inps.forEach(function(item){
str+=item.value+"<br/>";
})
console.log(str);
// 获取tip节点
var tip = document.getElementById("tip");
// 设置tip的html内容
tip.innerHTML = str;
}
</script>
</body>
</html>
五、修改style样式(相当于用js来样式)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
#div{
width: 200px;
height: 100px;
border: 2px solid red;
}
</style>
</head>
<body>
<div id="div">
你好样式style
</div>
<button type="button" onclick="changeW()">变宽</button>
<script type="text/javascript">
function changeW(){
// 获取div
var div = document.getElementById("div");
// 相当于用js写了行内样式
// 修改div样式
div.style.width = "400px";
// font-size写法改成驼峰式 fontSize
div.style.fontSize = "48px";
}
</script>
</body>
</html>
六、修改元素的显示与隐藏
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
#mydiv{
width: 200px;
height: 100px;
border: 2px solid red;
}
</style>
</head>
<body>
<button type="button" onclick="toggle()">切换</button>
<div id="mydiv">
学前端月薪过1.5万
</div>
<script type="text/javascript">
// 通过单击按钮实现div的切换与线上
function toggle(){
// 获取到div
var divs = document.getElementById("mydiv");
// 获取到display值(第一次默认获取不到)
var display = divs.style.display;
// 如果不是为none
if(display!=="none"){
// 隐藏
divs.style.display = "none";
}else{
// 显示
divs.style.display = "block";
}
}
</script>
</body>
</html>
七、通过classlist切换
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
#mydiv{
width: 200px;
height: 100px;
border: 2px solid red;
}
.hide{
display: none;
}
</style>
</head>
<body>
<button type="button" onclick="toggle()">切换</button>
<div id="mydiv">
学前端月薪过1.5万
</div>
<script type="text/javascript">
// 通过单击按钮实现div的切换与线上
function toggle(){
// 获取到div
var divs = document.getElementById("mydiv");
// 如果divs的类列表里面有hide 移除hide没有添加hide
// console.log(divs.classList);
divs.classList.toggle("hide");
// classList.toggle() 切换类名
// classList.add() 添加类名
// classList.remove() 移除类名
// classList.contains() 检查是否包含
}
</script>
</body>
</html>
八、style只能访问行内样式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
#mydiv{
height: 100px;
border: 2px solid red;
}
</style>
</head>
<body>
<button type="button">切换</button>
<div id="mydiv" style="width: 200px;">
学前端月薪过1.5万
</div>
<script type="text/javascript">
var divs = document.getElementById("mydiv");
// 如果是行内样式可以访问到
// 写在style标签里的样式是访问不到的
alert(divs.style.width);
alert(divs.style.height);
</script>
</body>
</html>
九、二级下拉菜单(ps:这个有点难)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
* {
margin: 0;
padding: 0;
}
ul,
li {
list-style: none;
}
.nav {
height: 90px;
background-color: #ccc;
}
.menu>li {
display: inline-block;
height: 90px;
line-height: 90px;
width: 160px;
text-align: center;
vertical-align: middle;
}
.menu>li:hover,.submenu>li:hover{
background-color: aqua;
}
.submenu {
background-color: #ccc;
display: none;
}
.link{
position: relative;
}
.submenu .submenu{
position: absolute;
width: 160px;
left: 160px;
top: 0;
}
</style>
</head>
<body>
<div class="nav">
<ul class="menu">
<li class="link">
首页
</li>
<li class="link">
<a href="">产品</a>
<ul class="submenu">
<li>
<a href="">二级菜单一</a>
</li>
<li class="link">
<a href="">二级菜单二</a>
<ul class="submenu">
<li>
<a href="">三级菜单一</a>
</li>
<li>
<a href="">三级菜单二</a>
</li>
<li>
<a href="">三级菜单三</a>
</li>
</ul>
</li>
<li>
<a href="">二级菜单三</a>
</li>
</ul>
</li>
</ul>
</div>
<script>
// link被hover时候,选择到link的子节点submenu显示
var links = document.querySelectorAll(".link");
// 对link遍历
links.forEach(function(item) {
// 选择到link(item)的子节点submen
var submenu = item.querySelector(".submenu");
// 当鼠标移入link(item)
item.onmouseover = function() {
// 让其子节点submenu显示,解决鼠标放到首页li上会报错用的js上三级运算符
submenu ? submenu.style.display = "block" : "";
}
// 当鼠标移除事件
item.onmouseout = function() {
// 让其子节点submenu显示 ,解决鼠标放到首页li上会报错用的js上三级运算符
submenu ? submenu.style.display = "none" : "";
}
})
// 本次单词:onmouseover(当鼠标移入事件),onmouseout(当鼠标以出事件)
</script>
</body>
</html>
十、全选按钮
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
* {
margin: 0;
padding: 0;
}
ul,
li {
list-style: none;
}
.nav {
height: 90px;
background-color: #ccc;
}
.menu>li {
display: inline-block;
height: 90px;
line-height: 90px;
width: 160px;
text-align: center;
vertical-align: middle;
}
.menu>li:hover,.submenu>li:hover{
background-color: aqua;
}
.submenu {
background-color: #ccc;
display: none;
}
.link{
position: relative;
}
.submenu .submenu{
position: absolute;
width: 160px;
left: 160px;
top: 0;
}
</style>
</head>
<body>
<h1>全选</h1>
<input type="checkbox" name="" id="all">全选<br>
<input type="checkbox" >选项1
<input type="checkbox" >选项2
<input type="checkbox" >选项3
<input type="checkbox" >选项4
<script>
// 当全选发生变化的时候,所有checkbox非all值与all的保持一致
// 获取all
var all = document.getElementById("all");
// 获取非all的checks
var checks = document.querySelectorAll("input:not(#all)");
all.onchange = function(){
// 遍历checks,设置元素的值为all的值
checks.forEach(function(item){
item.checked = all.checked;
})
}
// checks每个input,当发生变化时候,计算已经选中的个数
// 如果选中的个数等于checks长度那么就说明要设置全选了
checks.forEach(function(item){
item.onchange = function(){
// 获取已经选中的checkbox
// input:not(#all):check(css3新增选择器)
// input选中所有input标签:not(#all)过滤掉id为all表单:checked留下被选中的checkbox
var sel = document.querySelectorAll("input:not(#all):checked");
if(sel.length===checks.length){
// 如果选中的长度等于checks长度
all.checked = true;
} else{
all.checked = false;
}
}
})
</script>
</body>
</html>