JS DOM
这系列文章里记录的多半是案例,基础语法很少
获取元素
1. document.getElementById(id)
2. Document.getElementsByTagName()
3. Document.getElementsByClassName()
4. document.querySelector()
//查找第一个匹配 class属性的html元素
//这个例子中,会返回当前文档中第一个类名为 "myclass" 的元素:
var el = document.querySelector(".myclass");
var el = document.querySelector("#myclass");//通过id
var el = document.querySelector("li");//标签
//一个更复杂的选择器
//选择器也可以非常强大,如以下示例所示.
//这里, 一个class属性为"user-panel main"的div元素<div>(<div class="user-panel main">)内包含一个name属性为"login"的input元素<input> (<input name="login"/>) ,如何选择,如下所示:
var el = document.querySelector("div.user-panel.main input[name='login']");
5.document.querySelectorAll()
事件与操作元素
常见事件触发函数
1. 改变元素内容
区别
element.innerText: 不识别HTML标签, 去除空格和换行
var div = document.querySelector('div')
div.innerText = '测试'
element.innerHTML:识别html,推荐,标准,保留空格和换行
var div = document.querySelector('div')
div.innerHTML = '<strong>测试</strong>' //可以识别
可读写属性,获取属性内容
console.log(div.innerText)
console.log(div.innerHMTL)
2. 表单元素属性设置
利用DOM可以操作如下表单元素属性:
<button>按钮</button>
<input type="text" value="请输入内容">
<script>
var btn = document.querySelector('button')
var input = document.querySelector('input')
btn.onclick = function (){
input.value='点击切换了内容'
this.disabled=true // btn.disabled = true,this指向的是事件函数的调用者
}
</script>
表单案例,显示隐藏密码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.box{
position: relative;
width: 400px;
border-bottom: 1px solid #ccc;
margin: 100px auto;
}
.box input {
width: 370px;
height: 30px;
border: 0;
outline: none;
}
.box img {
position: absolute;
top: 2px;
right: 2px;
width: 24px;
}
</style>
</head>
<body>
<div class="box">
<label>
<img src="../images/eye.png" id="eye">
</label>
<input type="password" id="password">
</div>
<script>
// 1.获取元素
let eye = document.getElementById('eye')
let pwd = document.getElementById('password')
// 2.注册事件,处理程序
let flag = 0
eye.onclick = function () {
if (flag === 0) {
pwd.type = 'text'
eye.src = '../images/eye2.png'
flag = 1
} else {
pwd.type = 'password'
eye.src = '../images/eye.png'
flag = 0
}
}
</script>
</body>
</html>
3. 操作元素样式
// 基本用法
div.onclick = function () {
this.style.backgroundColor = 'purple'
this.style.width = '250px'
}
/***失去焦点、获得焦点 案例***/
let txt = document.querySelector('input')
txt.onfocus = function () {
if (this.value === '手机') {
this.value = ''
}
this.style.color='#333'
}
txt.onblur = function () {
if (this.value === '') {
this.value = '手机'
}
this.style.color='#999'
}
案例:排它思想
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
<script>
var btns = document.getElementsByTagName('button')
for (let i = 0; i < btns.length; i++) {
btns[i].onclick = function () {
for (let j = 0; j < btns.length; j++) {
btns[j].style.backgroundColor = ''
}
this.style.backgroundColor = 'pink'
}
}
案例:表格隔行变色
<table>
<thead>
<tr>
<th>代码</th>
<th>名称</th>
<th>最新公布净值</th>
<th>累计净值</th>
<th>前单位净值</th>
<th>净值增长率</th>
</tr>
</thead>
<tbody>
<tr>
<td>003256</td>
<td>农银金穗3个月定期开发债券</td>
<td>1.075</td>
<td>1.079</td>
<td>1.074</td>
<td>+0.047%</td>
</tr>
<tr>
<td>003256</td>
<td>农银金穗3个月定期开发债券</td>
<td>1.075</td>
<td>1.079</td>
<td>1.074</td>
<td>+0.047%</td>
</tr>
<tr>
<td>003256</td>
<td>农银金穗3个月定期开发债券</td>
<td>1.075</td>
<td>1.079</td>
<td>1.074</td>
<td>+0.047%</td>
</tr>
</tbody>
</table>
<script>
//鼠标事件:onmouseover/onmouseout
// 1.获取元素
var trs = document.querySelector('tbody').querySelectorAll('tr')
for (let i = 0; i < trs.length; i++) {
trs[i].onmouseover = function() {
this.className = 'bg'
}
trs[i].onmouseout = function () {
this.className = ''
}
}
</script>
案例:表单全选、取消全选
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
padding: 0;
margin: 0;
}
.wrap {
width: 300px;
margin: 100px auto 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #c0c0c0;
width: 300px;
}
th,
td {
border: 1px solid #d0d0d0;
color: #404060;
padding: 10px;
}
th {
background-color: #09c;
font: bold 16px "微软雅黑";
color: #fff;
}
td {
font: 14px "微软雅黑";
}
tbody tr {
background-color: #f0f0f0;
}
tbody tr:hover {
cursor: pointer;
background-color: #fafafa;
}
</style>
</head>
<body>
<div class="wrap">
<table>
<thead>
<tr>
<th>
<input type="checkbox" id="j_cbAll"/>
</th>
<th>商品</th>
<th>价钱</th>
</tr>
</thead>
<tbody id="j_tb">
<tr>
<td>
<input type="checkbox"/>
</td>
<td>iphone8</td>
<td>8000</td>
</tr>
<tr>
<td>
<input type="checkbox"/>
</td>
<td>ipad</td>
<td>4000</td>
</tr>
<tr>
<td>
<input type="checkbox"/>
</td>
<td>mac</td>
<td>9000</td>
</tr>
</tbody>
</table>
</div>
<script>
// 1. 全选,下面按钮跟着全选按钮即可
// 获取元素
let j_cbAll = document.getElementById('j_cbAll')
let j_tbs = document.getElementById('j_tb').getElementsByTagName('input')
// 全选按钮
j_cbAll.onclick = function () {
for (let i = 0; i < j_tbs.length; i++) {
j_tbs[i].checked = this.checked
}
}
for (let i = 0; i < j_tbs.length; i++) {
j_tbs[i].onclick = function () {
let flag = true
for (let j = 0; j < j_tbs.length; j++) {
if (!j_tbs[j].checked) {
flag = false
break
}
}
j_cbAll.checked = flag
}
}
</script>
</body>
</html>
案例:tab切换
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</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 {
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">
商品评价模块内容
</div>
<div class="item">
手机社区模块内容
</div>
</div>
</div>
<script type="text/javascript">
// 1. 2个模块
// 2. 上面选项卡排它思想
//1.获取元素
var lis = document.querySelector('.tab_list').querySelectorAll('li')
var items = document.querySelectorAll('.item')
for (let i = 0; i < lis.length; i++) {
// 2. 下面模块
// 2.1给lis所有的li添加自定义属性,属性值从0开始编号
lis[i].setAttribute('index',i)
lis[i].onclick = function () {
var index = this.getAttribute('index')
for (let j = 0; j < items.length; j++) {
items[j].style.display = 'none'
}
items[index].style.display = 'block'
for (let j = 0; j < lis.length; j++) {
lis[j].className = ''
}
lis[i].className = 'current'
}
}
</script>
</body>
</html>