云和教育:云和数据集团旗下高端ICT职业教育品牌
  • 国家级全民数字素养与技能培训基地
  • 河南省第一批产教融合型企业建设培育单位
  • 郑州市数字技能人才(码农)培养评价联盟
当前位置: 首页学习资料JAVA

JavaScript中的DOM操作

  • 作者:云和教育
  • 日期:2022-01-17
  • 浏览:969次

 

1.JavaScript-DOM操作

DOMDocument Object Module)针对页面中的节点进行动态操作

1.1 元素获取

js中提供了四种根据基础选择器而来的获取元素的方式

获取方式

描述

document.getElementById()

document.getElementsByClassName()

document.getElementsByTagName()

document.getElementsName()

根据id获取元素(唯一)

根据class名获取元素(一组)

根据标签名获取元素(一组)

根据name属性值获取元素(一组)

<input type="text" id="uname" name="hobby">

<input type="text" name="hobby">

<button type="button">获取元素</button>

//根据标签名获取元素

let btns = document.getElementsByTagName("button");

console.log(btns);

//根据类名获取

let eles = document.getElementsByClassName("money");

console.log(eles);

//根据id获取

let idInput = document.getElementById("uname");

console.log(idInput);

//根据name属性值获取

let hobbys = document.getElementsByName("hobby");

console.log(hobbys);

1.2 获取及修改元素内容

HTML中的元素分单标签与双标签,单标签以表单中的input为主

双标签获取方式


 

let btn = document.getElementsByTagName("button")[0];

let divNode = document.getElementsByTagName("div")[0];

//对象.innerHTML

console.log(btn.innerHTML);

console.log(divNode.innerHTML);

//对象.innerHTML=

divNode.innerHTML = "改变后的值";

console.log("————");

//对象.outerHTML

console.log(divNode.outerHTML);

outerHTMLinnerHTML的区别

innerHTML获取双标签中的内容(不论是该内容时标签还是文本)

outerHTML获取双标签中的内容(不论是该内容时标签还是文本),同时包含了自身的标签

单标签获取方式

//对象.value 这个只能用于获取单标签的元素值

console.log(hobbys[0].value,hobbys[0].id,hobbys[0].name);

//对象.value=

hobbys[1].value = "嘿嘿";

console.log(hobbys[1].value);

1.3 获取及修改元素的样式

<div style="color: darkgoldenrod;font-size: 14px;">

  注意样式本身也是元素中的一个属性中的值

</div>

//1.先获取到对象

let divNode = document.getElementsByTagName("div")[0];

//2.对象.属性

console.log("颜色值:",divNode.style.color);

console.log("字体大小:",divNode.style.fontSize);

//3.对象.style.属性=

divNode.style.fontSize = "20px";

divNode.style.color = "white";

divNode.style.backgroundColor = "rgb(155,255,255)";

案例:实现简易轮播图效果


 

<style type="text/css">

  div{

    width: 500px;

    height: 200px;

    margin: 100px auto;

    background-color: #6495ED;

  }

</style>

<div>

  <img src="./1.gif" alt="">

</div>

let pic = document.getElementsByTagName("img")[0];

let index = 1;

function changePicture(){

  if(index == 3){

    index = 1;

  }

  pic.src = "./"+(index++)+".gif";

  setTimeout(changePicture,1000);

}

changePicture();

案例2:使用第三方框架Swiper实现轮播效果

Swiper中文API文档

<div>

  <div>

    <div>Slide 1</div>

    <div>Slide 2</div>

    <div>Slide 3</div>

  </div>

  <div></div>

  <!– 如果需要导航按钮 –>

  <div></div>

  <div></div>

</div>

<!–引入第三方js–>

<script src="./js/swiper-bundle.js"></script>

<script>        

  var mySwiper = new Swiper ('.swiper-container', {

    direction: 'horizontal', // 切换选项

    loop: true, // 循环模式选项

    speed: 1000,

    autoplay: {

      delay:2000

    },

    effect:"flip",


 

    pagination: {

      el: '.swiper-pagination',

    },

    //如果需要前进后退按钮

    navigation: {

      nextEl: '.swiper-button-next',

      prevEl: '.swiper-button-prev',

    }

  })        

</script>

1.4 事件绑定

事件即用户对浏览器中的HTML元素进行了某些操作,浏览器根据用户的操作给出响应的整个过程中的触发形式

常见事件

事件名

描述

onclick

单击事件

onchange

onsubmit

onload

变化事件

表单提交事件

页面加载事件

onclick单击事件

<input type="text">

<input type="text">

<button onclick="sumMethod()">计算</button>

<span>结果为:<strong></strong></span>

/*

    操作流程

        1.在输入框中输入要计算的数字

        2.点击计算按钮进行计算

            a.先获取到两个输入框中的数字

            b.那两个结果进行运算

        3.将计算后的结果在strong标签显示出来

                将结果进行赋值操作

*/

//1.先获取到页面中需要用到的元素

let inNodes = document.getElementsByTagName('input');

let x = inNodes[0];

let y = inNodes[1];

let btn = document.getElementsByTagName("button")[0];

let strongNode = document.getElementsByTagName("strong")[0];


 

//2.定义任务

function sumMethod(){

  //3.获取到输入框中的值进行加法运算

  let result = parseFloat(x.value) + parseFloat(y.value);

  //4.将结果赋值到strong标签上

  strongNode.innerHTML = result;

}

onchange变化事件

<select name="pro" id="" onchange="changeMethod(this)">

  <option value="hunan">湖南省</option>

  <option value="shandong">山东省</option>

  <option value="henan">河南省</option>

</select>

/*

    select标签中提供了一个属性-selectedIndex(获取当前选中的下拉框中的下标-0)

*/

function changeMethod(obj){

  console.log("—",obj.selectedIndex,obj.value);

}

onsubmit表单提交事件

<form action="" onsubmit="return check()">

  用户名:<input type="text" name="uname">

  密码:<input type="password" name="pwd">

  <input type="submit" value="登录">

</form>

/*

    onsubmit事件需要一个boolean类型的返回值作为表单是否提交的依据

*/

let inNodes = document.getElementsByTagName("input");

function check(){

  let unameVal = inNodes[0].value;

  if(unameVal==""){

    return false;

  }

  return true;

}

onload页面加载事件


 

//onload函数是在页面加载完毕后才会执行其中的代码

window.onload = function(){

  let btnNodes = document.getElementsByTagName("button");

  btnNodes[0].onclick = show;

  btnNodes[1].onclick = show;

  function show(){

    alert("–");

  }

}

案例:实现购物车选择效果

*{

  margin: 0;

  padding: 0;

}

body{

  font-size: 14px;

}

#parent{

  width: 1200px;

  margin: 10px auto;

}

ul{

  list-style: none;

}

ul li{

  height: 70px;

  padding: 5px;

  border: 1px solid #b0b0b0;

}

ul li div{

  float: left;

  margin-right: 10px;

}

ul li div.pic,ul li div.check{

  line-height: 55px;

}

ul li div.pic{

  margin-top: 10px;

}

ul li div span{

  color: red;

}

ul li div .desc{

  font-size: 12px;

  color: #B0B0B0;

}

.clearfix:after{

  content: "";

  display: block;

  clear: both;


 

  height: 0;

  visibility: hidden;

}

<div id="parent">

  全选<input type="checkbox" id="checkAll" onclick="stateChange(this)" />

  <ul>

    <li>

      <div>

        <input type="checkbox" onclick="checkState()">

      </div>

      <div>

        <img src="./3.jpg" width="50px" height="50px" alt="">

      </div>

      <div>

        <h4>小蜜蜂扩音器</h4>

        <p><span>9.9</span></p>

        <p>小蜜蜂扩音器,只要9.9,买不了吃亏买不了上当</p>

      </div>

    </li>

    <li>

      <div>

        <input type="checkbox" onclick="checkState()">

      </div>

      <div>

        <img src="./3.jpg" width="50px" height="50px" alt="">

      </div>

      <div>

        <h4>星巴克马克杯</h4>

        <p><span>199.9</span></p>

        <p>星巴克马克杯,只要199.9,你值得拥有</p>

      </div>

    </li>

    <li>

      <div>

        <input type="checkbox" onclick="checkState()">

      </div>

      <div>

        <img src="./3.jpg" width="50px" height="50px" alt="">

      </div>

      <div>

        <h4>金属哑铃全套</h4>

        <p><span>109.9</span></p>

        <p>金属哑铃全套,只要109.9,渣男的道路近在咫尺</p>

      </div>

    </li>

  </ul>

</div>

//每一个商品的选中状态要和全选按钮的选中状态保持一致,从而达到全选的效果

let checks = document.getElementsByTagName("input");


 

//全选全不选函数

function stateChange(obj){

  //1.先获取到全选按钮的选中状态

  let state = obj.checked;

  //2.将所有的商品的选中状态和全选的选中状态保持一致

  for(let i=1;i<checks.length;i++){

    checks[i].checked = state;

  }

}

//反选关联函数

function checkState(){

  //当商品的复选框中有任意一个或多个处于未选中的状态,那全选复选框的状态就为未选中

  for(let i=1;i<checks.length;i++){

    //判断是否有未选中的复选框

    if(!checks[i].checked){

      //将全选框状态变为未选中状态

      checks[0].checked = false;

      return;   

    }

  }

  checks[0].checked = true;

}

案例2:随机点名效果

*{

  margin: 0;

  padding: 0;

}

h3{

  height: 45px;

  color: white;

  text-align: center;

  line-height: 45px;

  background-color: #6495ED;

  box-shadow: 3px 3px 5px #007AFF;

}

div{

  width: 500px;

  height: 400px;

  margin: 100px auto;

  box-shadow: 3px 3px 5px #ccc;

}

div h4{

  height: 50px;

  padding: 10px;

  text-align: center;

}

div p{

  width: 70%;

  height: 45px;

  line-height: 45px;


 

  text-align: center;

  margin: 40px auto;

}

div p input{

  display: block;

  width: 100%;

  height: 100%;

  font-size: 20px;

  text-align: center;

}

div p button{

  width: 120px;

  height: 35px;

  color: white;

  border: none;

  outline: none;

  background-color: #008B8B;

}

div p input,div p button{

  border-radius: 5px;

  box-shadow: 2px 2px 2px #ccc;

}

<h3>TongBaiShan's name-list</h3>

<div>

  <h4>name-list</h4>

  <p><input type="text"></p>

  <p><button onclick="show()">Start</button></p>

</div>

//获取元素

let nameNode = document.getElementsByTagName("input")[0];

let btnNode = document.getElementsByTagName("button")[0];

let nameArray = ['石坤坤',"何沛文","杨晨玙","王晨阳","张小豪","李鑫","丁铭扬","谢一飞"];

//定时器变量

let timer = null;

//设置默认值

nameNode.value = nameArray[0];

//显示姓名

function show(){

  if(timer == null){

    btnNode.innerHTML = "Stop";

    btnNode.style.color = "red";

    start();

    return;

  }

  btnNode.style.color = "white";

  btnNode.innerHTML = "Start";

  stop();

}

//开启点名器


 

function start(){

  //生成随机下标

  let index = Math.floor(Math.random()*nameArray.length);

  //根据下标拿到对应的名字

  let name = nameArray[index];

  //将名字在页面显示出来

  nameNode.value = name;

  //重复上述动作

  timer = setTimeout(start,15);

}

//关闭定时器

function stop(){

  clearTimeout(timer);

  timer = null;

}

1.5 元素动态增删

//获取元素

let btn = document.getElementsByTagName("button")[0];

btn.onclick = function(){

  //添加元素 document.createElement("标签名");

  let aNode = document.createElement("a");

  //给创建好的元素添加内容及相关的属性

  aNode.innerHTML = "百度新闻";

  aNode.href = "http://news.baidu.com";

  //将创建好的元素放到指定的页面位置中 appendChild()

  let divNode = document.getElementsByTagName("div")[0];

  divNode.appendChild(aNode);

}

案例:表格动态增删

p{

  text-align: center;

}

button{

  width: 120px;

}

td{

  height: 35px;

  text-align: center;

}

span{

  color: white;

  font-size: 14px;

  cursor: pointer;

  padding: 5px;

  margin-left: 15px;

}

span:nth-of-type(1){


 

  background-color: darkcyan;

}

span:nth-of-type(2){

  background-color: darkorange;

}

span:hover{

  opacity: 0.7;

}

<p>

  <button>create Element</button>

  <button>delete Element</button>

</p>

<table id="test" border="1" cellpadding="0" cellspacing="0" width="50%">

  <thead>

    <tr>

      <th>用户编号</th>

      <th>用户姓名</th>

      <th>联系方式</th>

      <th>操作方式</th>

    </tr>

  </thead>

</table>

let tabNode = document.getElementsByTagName("table")[0];

//找到两个按钮绑定事件

let btns = document.getElementsByTagName("button");

//添加元素

let index = 10000;

btns[0].onclick = function(){

  //创建行元素及列元素

  let trNode = document.createElement("tr");

  let tdNode01 = document.createElement("td");

  let tdNode02 = document.createElement("td");

  let tdNode03 = document.createElement("td");

  let tdNode04 = document.createElement("td");

  //给列元素赋值

  tdNode01.innerHTML = ++index;

  tdNode02.innerHTML = '蔡文姬';

  tdNode03.innerHTML = "120";

  //创建操作栏中的标签

  let spanNode = document.createElement("span");

  let spanNode02 = document.createElement("span");

  spanNode.innerHTML = "编辑";

  spanNode02.innerHTML = "删除";

  //将操作用的两个标签添加到操作栏中

  tdNode04.appendChild(spanNode);

  tdNode04.appendChild(spanNode02);

  //将列添加到行中

  trNode.appendChild(tdNode01);

  trNode.appendChild(tdNode02);


 

  trNode.appendChild(tdNode03);

  trNode.appendChild(tdNode04);

  //将行元素添加到表格中

  tabNode.appendChild(trNode);

}

//删除元素

btns[1].onclick = function(){

  //删除 remove()  removeChild()

  //找到全部的tr节点

  let trNodes = document.getElementsByTagName("tr");

  //找到最后一个tr节点

  let lastTrNode = trNodes[trNodes.length-1];

  //lastTrNode.remove();

  tabNode.removeChild(lastTrNode);

}