原生JS 操作 DOM

DOM操作

查询
按照ID查询

document.getElementById(id) // 兼容最好
// demo
// HTMl
<body>
  <div id="main">
    <div id="content"></div>
  </div>
</body>

// Script
const mainDom = document.getElementById('main');

const contentDom = document.getElementById('content');

按照class查询

element.getElementsByClassName // ie9+
element.querySelectorAll // ie8
遍历 // ie7-

// demo
// HTMl
<body>
  <div id="main">
    <div id="content">
      <p class="info test">info1</p>
      <p class="info">info2</p>
      <p class="info">info3</p>
    </div>
  </div>
</body>

// Script
const mainDom = document.getElementById('main');
const infoDomList1 = mainDom.querySelectorAll('.info.test');
const infoDomList2 = mainDom.getElementsByClassName('info test');

按照Tag查询

element.getElementsByTagName // ie6+

// demo
// HTMl
<body>
  <div id="main">
    <div id="content">
      <p class="info test">info1</p>
      <p class="info">info2</p>
      <p class="info">info3</p>
    </div>
  </div>
</body>

// Script
const divDom = document.getElementsByTagName('div');
const pDom = divDom[0].getElementsByTagName('p');

按照属性查询
element.querySelector //ie8+
element.querySelectorAll() //ie8+
querySelector返回返回的是单个DOM元素,querySelectorAll返回NodeList
querySelector的语法很类似jquery里面的选择器,querySelector和querySelectorAll的使用方法是一样,所以下面的一些说法都是适用于两个。

// demo
// HTMl
<body>
  <div id="main">
    <div id="content">
      <p class="info test">info1</p>
      <p class="info">info2</p>
      <p class="info">info3</p>
    </div>
  </div>
</body>

// Script
const infoDom = document.querySelectorAll('.info');
const infoDom2 = document.querySelectorAll('.info:not(.test)');

querySelectorAll 和 querySelector 在子查询下和jquery不是一样的,详见DOM元素querySelectorAll可能让你意外的特性表现
简单的说就是document.querySelector("#my-id").querySelectorAll(“div div”);,直接感觉是查询#my-id的子元素下符合div div的dom,其实不是,而是#my-id的子元素中,同时也符合在全局范围内的div div的dom。

获取父元素
element.parentNode // 基本都兼容
获取子元素
element.childNodes // 基本都兼容
element.childNodes不止会获取到DOM,也会获取到文字等,只有当nodeType === 1时才表示DOM。
获取兄弟节点
获取前面的兄弟节点
element.previousSibling //基本都兼容
获取所有前面的兄弟节点就是遍历previousSibling, 直到null。

Gecko内核的浏览器会在源代码中标签内部有空白符的地方插入一个文本结点到文档中.因此,使用诸如 Node.firstChild 和 Node.previousSibling 之类的方法可能会引用到一个空白符文本节点, 而不是使用者所预期得到的节点.

获取后面的兄弟节点
element.nextSibling //基本都兼容
获取所有和注意点都和previousSibling一样
DOM操作
创建DOM
document.createElement(tagName)
新增DOM
添加到节点的子节点的最后 append
paranetElement.appendChild(child);
添加到节点的前面
paranetElement.insertBefore(newElement, Element)

通过insertBefore方法可以将newElement插入到Element前面,如果Element是null则将newElement插入到paranetElement的尾部。
如果newElement是一个已经存在在文档中的DOM, insertBefore则会表现为移动该DOM(将会保留所有的事件)。
添加到节点的后面

parentDiv.insertBefore(sp1, sp2.nextSibling);
复制代码如果sp2没有下一个节点,则它肯定是最后一个节点,则sp2.nextSibling返回null,且sp1被插入到子节点列表的最后面(即sp2后面)
详见Node.insertBefore()
修改DOM
修改DOM的文案

Element.innerHTML // 获取标签内的所有内容
Element.innerText // 只获取标签内的文字内容,不包括标签
修改css
element.style.cssAttribute
修改属性
element.setAttribute()
element.removeAttribute()
element.className
删除DOM
paranetElement.removeChild(element)
清空子节点
没有专门的函数,可以遍历removeChild来实现

var element = document.getElementById("top");
while (element.firstChild) {
  element.removeChild(element.firstChild);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值