获取DOM元素&节点增删改查&元素属性、内容、样式操作

获取DOM元素 part1

    <div class="father">
      <form>
        <input type="text" name="test" />
        <input type="password" name="test" />
      </form>
    </div>
    <div class="father" id="box">我是div</div>

1.通过id获取指定元素
由于id不可以重复,所以找到了就会将找到的标签包装成一个对象返回给我们,找不到就返回Null
注意点:DOM操作返回的是一个对象,这个对象是宿主类型对象(浏览器提供的对象)

    let oDiv = document.getElementById("box");
    console.log(oDiv);
    console.log(typeof oDiv);

2.通过class名称获取
由于class可以重复,所以找到了就返回一个存储了标签对象的数组,找不到就返回一个空数组

    let oDivs = document.getElementsByClassName("father");
    console.log(oDivs);

3.通过name名称获取
由于name可以重复,所以找到了就返回一个存储了标签对象的数组,找不到就返回一个空数组
注意点:getElementByName 在不用的浏览器其中工作方式不同.在IE和Opera中,getElementByName()方法还会返回哪些id为指定值的元素.

    let oDivs = document.getElementsByName("test");
    console.log(oDivs);

4.通过标签名称获取
由于标签名称可以重复,所以找到了就返回一个存储了标签对象的数组,找不到就返回一个空数组

    let oDivs =  document.getElementsByTagName("div");
    console.log(oDivs);

5.通过选择器获取(重点掌握)
querySelector只会返回根据指定选择器找到的第一个元素

    let oDiv = document.querySelector("#box");
    let oDiv = document.querySelector(".father");
    let oDiv = document.querySelector("div>form");
    console.log(oDiv);

6.通过选择器获取(重点掌握)
querySelectorAll会返回指定选择器找到的所有元素

    let oDivs = document.querySelectorAll(".father");
    console.log(oDivs);

获取DOM元素 part2

    <div>
      <h1>1</h1>
      <h2>2</h2>
      <p class="item">3</p>
      <p>4</p>
      <span>5</span>
    </div>

1.获取指定元素所有的子元素

let oDiv = document,querySelector("div");
console.log(oDiv.children); //children属性获取到的是指定元素中所有的子元素
console.log(oDiv.childNodes);//childNodes属性获取到的是指定元素中所有的节点
for(let node of oDiv childNodes){
   if(node.nodeType === Node.ELEMENT_NODE){
console.log(node);
     }
}

2.节点:DOM对象(document),这个对象已树的形式保存了页面上所有的内容 HTML页面每一部分都是由节点(标签(元素),文本,属性)构成的
3.获取指定节点中的第一个子节点

let oDiv = document.querySelector("div");
console.log(oDiv.firstChild);

获取指定元素中的第一个子元素

console.log(oDiv.firstElementChild);

4.获取指定节点中最后一个子节点

console.log(oDiv.lastChild);

获取指定元素中最后一个子元素

console.log(oDiv.lastElementChild);

5.通过子元素获取父元素/父节点

let item = document,querySelector(".item");     
console.log(item.parentElement);
console.log(item.parentNode);

6.获取相邻上一个节点/元素

console.log(item.previousSibling);
console.log(item.previousElementSibling);

7.获取相邻下一个节点/元素

console.log(item.nextSibling);
console.log(item.nextElementSibling);

节点增删改查

    <div>
      <h1>我是标题</h1>
      <p>我是段落</p>
    </div>

1.创建节点

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

2.添加节点
注意点:appendChild方法会将指定的元素添加到最后

let oDiv = document.querySelector("div");
oDiv.appendChild(oSpan)
let oA = document.createElement("a");
oDiv.appendChild(oA);

3.插入节点

let oSpan = document.createElement("span");
let oDiv = document.querySelector("div");
let oH1 = document.querySelector("h1");
let oP = document.querySelector("p");
oDiv.insertBefore(oSpan, oH1); //含义:将oSpan 添加到oDiv里,并且在oH1
//之前
 // oDiv.insertBefore(oSpan, oP); 

4.删除节点
注意点: 在js中如果想要删除某一个元素, 只能通过对应的父元素来删除
元素是不能够自删的

let oSpan = document.createElement("span");
let oDiv = document.querySelector("div");
let oH1 = document.querySelector("h1");
let oP = document.querySelector("p");
oDiv.insertBefore(oSpan, oP);  
console.log(oSpan.parentNode); //拿到oSpan的父元素 
oSpan.parentNode.removeChild(oSpan); //通过元素的父元素 删除父元素中指定的子元素 
oDiv.parentNode.removeChild(oDiv);

5.克隆节点
注意点: cloneNode方法默认不会克隆子元素, 如果想克隆子元素需要传递一个true

let oDiv = document.querySelector("div"); //拿到div 并赋值给oDiv
let newDiv =  oDiv.cloneNode(); // 克隆oDiv 不包含子元素
let newDiv =  oDiv.cloneNode(true); //传递true 包含子元素
console.log(newDiv);

元素属性操作

<img src="images/1.jpg" alt="我是alt" title="我是title" zxw="999" />

无论是通过document创建还是查询出来的标签,系统都会讲元素包装成一个对象返回给我们,系统在包装这个对象的时候回自动将元素的属性都包装到这个对象中,所以只要拿到这个对象就可以拿到标签属性,操作标签属性

let oImg = document.querySelector("img");
//let oImg = document.createElement("img");
console.dir(oImg); //console.log()会在浏览器控制台打印出信息; console.dir()可以显示一个对象的所有属性和方法

1.获取元素属性 >

let oImg = document,querySelector("img")
//console.log(oImg.alt);
console.log(oImg.getAttribute("alt"));

注意点: 通过对象.属性名称的方式无法获取到自定义属性的取值
通过getAttribute方法可以获取到自定义属性的取值

2.修改元素属性

let oImg = document.querySelector("img");
//oImg.title = "新的title";
oImg.setAttribute("title", "新的title222"); //参数:要修改的属性名 参数:新的属性值

注意点:和获取元素属性一样

3.新增元素属性

let oImg = document.querySelector("img");
oImg.setAttribute("zxw", "666");

注意点: setAttribute方法如果属性不存在就是新增, 如果属性存在就是修改

4,删除元素属性

let oImg = document.querySelector("img");
// oImg.alt = "";
oImg.removeAttribute("alt");

注意点和获取元素属性一样

元素内容操作

    <div>
      我是div
      <h1>我是标题</h1>
      <p>我是段落</p>
    </div>

1.获取元素内容

   let oDiv = document.querySelector("div"); //拿到div
   console.log(oDiv.innerHTML);
   console.log(oDiv.innerText);
   console.log(oDiv.textContent);

innerHTML&innerText&textContent差异
1.innerHTML获取的内容包含标签, innerText/textContent获取的内容不包含标签
2.innerHTML/textContent获取的内容不会去除两端的空格, innerText获取的内容会去除两端的空格

2.设置元素内容

      let oDiv = document.querySelector("div");
      // oDiv.innerHTML = "123";
      // oDiv.innerText = "456";
      // oDiv.textContent = "789";
      //  oDiv.innerHTML = "<span>我是span</span>";
      //  oDiv.innerText = "<span>我是span</span>";
      //  oDiv.textContent = "<span>我是span</span>";

特点:
无论通过innerHTML/innerText/textContent设置内容, 新的内容都会覆盖原有的内容

区别:
如果通过innerHTML设置数据, 数据中包含标签, 会转换成标签之后再添加
如果通过innerText/textContent设置数据, 数据中包含标签, 不会转换成标签, 会当做一个字符串直接设置

在企业开发中,因为有浏览器兼容的问题,所以innerText/textContent是结合起来使用的.所以 如果我们想把内容当做字符串设置进去的话,我们一般这样操作

      function setText(obj, text) {
        if ("textContent" in obj) {
          obj.textContent = text;
        } else {
          obj.innerText = text;
        }
      }

操作元素样式

    <style>
      .box {
        width: 200px;
        height: 200px;
        background-color: red;
      }
    </style>
 
    <div class="box"></div>

1.设置元素样式

    let oDiv = document.querySelector("div"); 拿到div
    // 第一种方式
       注意点: 由于class在JS中是一个关键字, 所以叫做className
       oDiv.className = "box"; 为div设置一个值   
    // 第二种方式
    // 注意点: 过去CSS中通过-连接的样式, 在JS中都是驼峰命名
    // 注意点: 通过JS添加的样式都是行内样式, 会覆盖掉同名的CSS样式
    oDiv.style.width = "300px";
    oDiv.style.height = "300px";
    oDiv.style.backgroundColor = "blue";

2.获取元素样式

      let oDiv = document.querySelector("div");
      // oDiv.style.width = "300px";
      // 注意点: 通过style属性只能过去到行内样式的属性值, 获取不到CSS设置的属性值
      // console.log(oDiv.style.width);
      // 注意点: 如果想获取到CSS设置的属性值, 必须通过getComputedStyle方法来获取
      // getComputedStyle方法接收一个参数, 这个参数就是要获取的元素对象
      // getComputedStyle方法返回一个对象, 这个对象中就保存了CSS设置的样式和属性值
      let style = window.getComputedStyle(oDiv);
      console.log(style.width);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 经过前几篇文章的学习,对DOM有一定的了解。但这仅仅是DOM一些基础性的知识,如果要对DOM更了解,需要更深入地了...
    一个敲代码的前端妹子阅读 4,938评论 0 0
  • 操作DOM的核心就是增删改查 参考: JavaScript DOM编程——API详解 目录 一、节点创建型API ...
    动感超逗阅读 14,475评论 0 11
  •   尽管 DOM 作为 API 已经非常完善了,但为了实现更过的功能,仍然会有一些标准或专有的扩展。   2008...
    霜天晓阅读 3,280评论 0 0
  • 前言:尽管现在有很多优秀的框架,大大简化了我们的DOM操作,但是我们仍然要学好DOM知识来写原生JS,从根本上去理...
    长鲸向南阅读 6,006评论 0 0
  • 什么是DOM?DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Obje...
    浮若年华_7a56阅读 1,868评论 0 0

友情链接更多精彩内容