JavaScript中阶 DOM 文档对象模型 (Document Object Model)

是W3C为HTML文档提供的一个API(应用程序接口)

API提供了对HTML中的元素、属性、文本的一系列属性、操作的方法,满足动态化文档的需求(让HTML提供接口给JS,让JS去操控HTML)

DOM节点(node)

HTML文档中的文档、标签、属性、文本、注释等都成为node节点(元素节点、属性节点、文本节点)

节点分类

元素节点、属性节点、文本节点

属性节点不是子节点

节点属性

节点类型node namenode typenode value
元素节点标签名(大写)1null
属性节点属性名2属性值
文本节点#text3文本内容

获取属性节点:ele.getAttributeNode(id);

获取文本节点:ele.firstChild;

节点查找

DOM 0级查找节点

如果标记存在多个,都是以nodelist类型即伪数组的形式存在,如要对节点进行操作,通过索引具体访问

document.bady

document.images

document.links

document.forms

快速查找节点

从DOM 2级开始新增,若有多个,后面需要跟对应的索引

document.getElementById(),id名

document.getElementsByClassName(),类名 需要加索引

document.getElementsByTagName(),元素名

document.getElementsByName(),表单name属性

document.querySelector(),选择器,获取符合条件的第一个

document.querySelectorAll(),选择器

通过关系查找节点(会找到无用的节点)

parentNode 父节点

firstChild 第一个孩子 拿到的是第一个节点是空文本节点

lastChild 最后一个孩子

childNodes 所有孩子

previousSibling 上一个兄弟 也有空白文本节点

nextSibling 下一个兄弟

只查找有用的元素节点

parentElement 获取父级元素

firstElementChild 获取第一个子级元素

lastElementChild 获取最后一个子级元素

children 获取所有子级元素

previousElementSibling 获取上一个兄弟元素

nextElementSibling 获取下一个兄弟元素

 <div id=fa>
        <div class="father">
            <div class="son1"></div>
            <div class="son2"></div>
            <div class="son3"></div>
            <div class="son4"></div>
        </div>
    </div>
    <script>
        // 获取父元素
        let father = document.querySelector('.father')
        console.log(father);
        //获取第一个子元素
        let son1 = father.firstElementChild
        console.log(son1);
        //获取最后一个子元素
        let son4 = father.lastElementChild
        console.log(son4);
        //获取上一个兄弟元素
        let son3 = son4.previousElementSibling
        console.log(son3);
        //获取下一个兄弟元素
        let son2 = son1.nextElementSibling
        console.log(son2);
        //获取所有子级元素
        let child = father.children
        console.log(child);
        //获取父级元素
        let fa = father.parentElement
        console.log(fa);
         </script>
 

操作节点

创建节点

创建元素节点

document.createElement(tag)

创建文本节点

document.createTextNode(content)

创建属性节点

document.createAttribute(attr)

添加节点

parentNode.appendChild(childNode)

将一个新节点作为最后一个子元素添加到指定的父节点

语法
let newNode = document.createElement(`div`);
parentEle.appendChild(newNode);

parentNode.insertBefore(newChildNodes,oldChildNodes)

在父节点的某个已有的子节点之前在插入一个子节点

 语法
 
 <div id="father">
        <p id="p "></p>
    </div>
     <script>
    let newChild = document.createElement("a");//创建新节点
    let p = document.getElementById("p");//获取旧节点
    father.insertBefore(newChild, p);//把新节点放在旧节点的前面
     </script>
    

删除节点

parentNode.removeChild(childNode)

  
 <div id="father">
        <p id="p "></p>
    </div>
    
   <script>
   father.removeChild(p);//id名是唯一的,就不需要getElement()获取
    </script>

替换节点

parentNode.replaceChild(newChildNodes,oldChildNodes)

  
 <div id="father">
        <p id="son "></p>
    </div>
    
   <script>
   let newChild = document.createElement("p");//创建新节点
   father.replaceChild(newChild,son);//用新创建的节点替换掉旧节点 其中son也是唯一的id,就没有获取
    </script>
    
       <div id="father">
        <p id="son">1111</p>
    </div>
    <script>
        let newChild = document.createElement("div") // 创建新元素
        newChild.innerText = "新的内容";
        father.replaceChild(newChild, son); //   替换

文本节点操作

ele.innerText

ele.innerHTML

  <div id="pEle">
        <p>123</p>
    </div>
    
       <script>
  consloe.log(pEle.innerText);//123
  consloe.log(pEle.innerHTML);// <p>123</p>
  pEle.innerText = "新的内容";//重新赋值
  pEle.innerHTML = "<a href = "#">新的内容</a>;
    </script>
 
    

点击事件

  
  <input type="button" value="click">
    <script>
        let body = document.body; //获取body
        let btn = body.firstElementChild; //获取body的第一个孩子input
        //绑定点击事件
        btn.onclick = function() {
            console.log(1111);//点击一次执行一次
        }
        console.log(btn);
    </script>

操作属性节点

以前使用createAttribute()搭配setAttributeNode()为元素添加属性

  <div></div>
    <script>
        let ele = document.querySeletor(`div`); //获取节点
        let created = document.createAttribute(`id`); //创建属性节点 id
        createld.value = `box`; //为属性赋值
        ele.setAttributeNode(createld) //为元素设置属性节点 <div id=`box`></div>
     </script>

属性操作

访问元素的属性elementNode.attribute访问

如访问a的herf属性:a.herf

更改属性也是直接赋值 a.herf=................

特殊的原生属性

以Class获取元素是byClassName(),所以操作class的属性也是ele.className

获取label获取for属性值,以elementNode.htmlFor获取

自定义属性操作

标签自身已存在的属性是原生属性,class,id等

用data-为前缀来命名

<div id="box" date-inde="1"></div>  data-自己命名  
 box.dateset.index = "0"; //修改元素自定义属性  
 box.dateset.name = "medicineChest"; //设置自定义属性    
 //<div  date-name="medicineChest"></div>  
 box.dataset["value"] = "medicineChest"; //方括号访问法

方法操作属性

eleNode.getAttribute('attr') 获取属性值

  
 <a href="#" id="link" title="a标签" class="red" date-life="true"></a> 
   <script>    
    console.log(link.getAttribute("titile")); //a标签        console.log(link.getAttribute("class")); //red    
    console.log(link.getAttribute("date-life")); //true  
   </script>

eleNode.setAttribute('attr','value') 设置属性,属性值

  
 <a id="link"></a>   
 <script>            
 link.setAttribute("herf","#"); 
//   <a id="link"  href="#"></a>   
  </script>

eleNode.removeAttribute('attr') 删除属性

 <a id="link"  href="#"  title="a标签">  </a>  
 <script>       
  link.removeAttribute('title');
//   <a id="link"  href="#"></a>  
   </script>

eleNode.hasAttribute('attr') 查询有没有属性 返回布尔值

 <a id="link"  href="#"  title="a标签">  </a>
   <script>     
    link.hasAttribute('title'); //  true   
  </script>

操作元素class列表

ele.classList.add("class1","class2"...)添加类

ele.classList.remove("class1","class2"...)删除类,如不存在,不报错

ele.classList.contains("className")是否存在类,返回布尔值

ele.classList.toggle("className")切换类,有就取消,没有就增加

property和attribute属性 attribute 与 property 的区别 · 语雀

property:对象的属性

attribute: HTML标签的属性,值是字符串类型

操作内嵌样式

elementNode.style

设置、获取内嵌的样式

     
   <div id="box" </div>   
       <script>   
    box.style.height = "100px" //设置属性   
     box.style.backgroundColor = "red"; //驼峰命名   
     console.log(box.style.height); //100px      
    </script>

elementNode.style.cssText

属性名不需要驼峰,类似Css

    <div id="box" </div>   
    <script>      
 box.style.cssText = "     
  height = "100px;     
  backgroundColor = "red";    
 ";     
  </script>

Obiect.assign(target,sources)目标,来源

写法属于对象的键值对

   <div id="box" </div>   
    <script>    
   Obiect.assign(box.style,{   
      height :"100px,     
  backgroundColor :"red";   
    });  
     ;   
    </script>
Obiect.assign(div.style,box.style);//把box的样式给div

获取最终样式

window.getComputedStyle(ele).attr 现代浏览器 获取元素的某个属性

window.currentStyle.attr 低版本IE

window.getComputedStyle(ele).attrconsole.log(window.getComputedStyle(box).height);//window.可以省略

获取元素实际尺寸

属性描述
ele.clientWidth,ele.clientHight返回元素的content+padding的值
ele.offsetWidth,ele.offsetHight返回元素的content+padding+border的值

获取元素位置

属性描述
ele.offsetLeft,ele.offsetTop相对于包含它的右非静态定位属性的元素的0 0点的距离(类似于absolute)

children 和 selectorAll 的差别

children 和 selectorAll 的差别 · 语雀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值