文章目录:

1.DOM简介
2.获取元素
        getElementByld()
        getElementsByTagName()
        getElementsByClassName()
        querySelector()和querySelectorAll()
        getElementsByName()
        选择title元素和body元素
3.创建元素
4.插入元素
        appendChild()
        insertBefore()
5.删除元素
6.复制元素
7.替换元素
8.HTML属性操作(对象属性)
        获取HTML属性值
        设置HTML属性值
9.HTML属性操作(对象方法)
        getAttribute()
        setAttribute()
        removeAttribute()
        hasAttribute()
10.CSS属性操作
        获取CSS属性值
        设置单一CSS属性
        设置多个CSS属性
11.DOM遍历
        查找父元素
        查找子元素
        查找兄弟元素
12.innerHTML和innerText

1.DOM简介

节点和元素的概念解析:

  1. 每一个元素是一个节点,每一个节点看成一个对象
  2. 我们操作元素的时候实际上是把元素看成一个对象,然后对这个对象的属性和方法进行相关的操作
  3. 节点是包含元素的
  4. 每一个元素是一个节点,这个节点称为元素节点

2.获取元素

2.1获取元素概述

获取元素其实就是,获取元素节点,对于一个页面,我们想要对某个元素进行操作,就必须通过一定的方式来获取该元素,只有获取到了才能对其进行相应的操作。

2.2getElementByld()

getElementByld():通过id来选择元素
语法:document.getElementById("id名")

例子:

getElementByld():不可以操作动态的DOM,如下:

2.2getElementsByTagName()

getElementsByTagName():通过标签名来选择元素
语法:document.getElementsByTagName("标签名")


我们可以看到我们并没有按照标准的语法来写这段代码,那么上面的例子是不是可以这么写呢

当然可以但是我们需要知道两者的区别,第一种写法的意思是获取的是id为list的ul元素下的所有li元素(以伪数组的形式),第二种写法的意思是获取整个HTML页面的所有li元素(以伪数组的形式)

注:伪数组的形式指的是只能使用length和下标的方式,但是对于数组的其他方法是无法使用的

getElementsByTagName()能操作动态创建的DOM,如下:

2.3getElementsByClassName()

getElementsByClassName():通过class来选择元素
语法:document.getElementsByClassName("类名")

2.4querySelector()和querySelectorAll()

querySelector()和querySelectorAll():通过选择器的方式来获取所需要的元素
querySelector():选取满足选择条件的第一个元素
querySelectorAll():选取满足条件的所有元素
语法:
document.querSelector("选择器“)
document.querySelectorAll("选择器")
选择器的写法和CSS完全一致

2.5getElementsByName()

getElementsByName():表单元素一般有一个其他元素都没有的name属性,如果想要通过name属性来获取表单元素,我们可以使用getElementsByName()来实现。一般的getElementsByName()只用于表单元素,且只用于单选按钮和复选框
语法:document.getElementsByName("name名")

例子1:

例子2:

2.6.选择title元素和body元素

由于一个页面只有一个title元素和一个body元素所以专门提供两个方便的方法进行选择
语法:document.titledocument.body

例子:

3.创建元素

例子1:
对上述例子分析:

例子2创建带属性的元素:

例子3:动态创建图片:

例子4:创建多个元素:

4.插入元素

4.1appendChild()

appendChild():把一个新的元素插入到父元素的内部子元素的末尾
语法:A.appendChild(B):在没有特殊说明的情况下,A表示父元素,B表示动态创建好的新元素

例子:

4.2insertBefore()

insertBefore():将一个新的元素插入到父元素的某一个子元素之前
语法:A.insertBefore(B,ref):A表示父元素,B表示子元素,ref表示指定子元素

例子:

5.删除元素

语法:A.removeChild(B):删除父元素下的子元素,A表示父元素,B表示父元素内的某个子元素

例子1:删除最后一个子元素:

例子2:删除整个列表:

6.复制元素

语法:obj.cloneNode(bool):复制元素
obj表示被复制的元素,bool表示一个布尔值
bool取1或者true表示复制元素本身以及该元素下的所有子元素
0或者false表示仅仅复制元素本身,不复制该元素下的所有子元素

例子:

7.替换元素

语法:A.replaceChild(new,old)
A表示父元素,new表示新子元素,old表示旧子元素

演示一下上述的例子:

8.HTML属性操作(对象属性)

8.1HTML属性操作(对象属性)简介

8.2获取HTML属性值

语法:obj.attr
obj是元素名,是一个DOM对象,所谓的DOM对象就是使用getElementByld()getElementsByTagName()等方法获取的元素节点,attr是一个属性名

例子1:获取静态HTML中的属性值

例子2:获取动态DOM中的属性值

例子3:获取文本框的值

例子4:获取单选框的值

例子5:获取复选框的值
例子6:获取下拉菜单的值

8.3设置HTML属性值

语法:obj.attr="值"
obj是元素名是一个DOM对象,attr是属性名

例子1:

例子2:

我们点击修改后

9.HTML属性操作(对象方法)

9.1getAttribute()

语法:obj.getAttribute(“attr”):获取某个元素属性的值
obj是元素名,attr是属性名。注意它只能有一个参数且特别注意attr要用引号
其实obj.getAttributr("atttr")obj.attr获取属性值的方式是等价的都能获取静态的HTML属性值和动态的DOM属性值

例子1:获取固有属性值


例子2:获取自定义属性值

看到弹出的结果,可能和我们想的预期的不一样,那么这是为啥呢,其实这个data是我们自定义的属性,不是用户自带的,我们使用obj.attr是无法获取自定义属性的,那么这时候只能使用的我们的getAttribute(),如下:

9.2setAttribute()

语法:obj.setAttribute(“attr”,"值"):设置某个元素某个属性的值
obj是元素名,attr是属性名第一个参数是属性名,第二个参数是要设置的属性值,同样的一下两个也是等价的
obj.setAttribute(“attr”,"值")
obj.attr="值"

例子:

9.3removeAttribute()

语法:obj.removeAttribute():删除某个属性

例子1:

例子2:

9.4hasAttribute()

语法:obj.hasAttribute():判断元素是否包含某一个属性,包含返回true不包含返回false

10.CSS属性操作

10.1获取CSS属性值

语法:getComputedStyle(obj).attrgetComputedStyle(obj)["attr"]
obj代表DOM对象,通过getElementByld()getElementsByTagName()等方法获取,attr代表表示CSS属性名,属性名使用的是驼峰原则,比如我们的CSS属性字体大小是font-size,当我们用js来获得属性值的时候要这么写fontSize,其他的类似。

下面举个例子:

10.2设置单一CSS属性值

1.设置一个属性值:obj.style.attr="值"等价于obj.style["attr"]="值"属性名使用驼峰原则

例子1:设置一个属性值

例子2:设置符合属性值

由于我们的attr和val都是我们输入的字符串所以不能用obj.style.attr来设置,而是用obj.style[attr]

10.3设置多个CSS属性值

语法:obj.style.cssText="值",注意这里再使用的时候就不再使用驼峰原则了

例子1:

当我在文本框中输入:height:50px;width:50px;background-color:red;就变成了:

例子2:

10.4一个值得思考的问题:

我们在获取CSS属性值的时候使用obj.style.attr或者obj.style["attr"]不就行了,为啥要使用getComputedStyle()呢,看下面一段代码:

为啥????获取宽度失败。原因是因为obj.style.attr只可以获取元素style属性中设置的CSS属性值
对于内部或者外部样式是没有办法获取的,下面行内样式就能成功获取


getComputedStyle()可以获取内部和外部,行内式

11.DOM遍历

11.1查找父元素

语法:obj.parentNode:获取某个元素的父元素
同样的obj是DOM对象

例子(代码太长显示不完就直接上代码了):

<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8" /><style type="text/css">table{border-collapse:collapse;}table,tr,td{border:1px solid gray;}</style><script>window.onload = function () {var oTd = document.getElementsByTagName("td");//遍历每一个td元素for (var i = 0; i < oTd.length; i++) {//为每一个td元素添加点击事件oTd[i].onclick = function () {//获得当前td的父元素(即tr)var oParent = this.parentNode;//为当前td的父元素添加样式oParent.style.color = "white";oParent.style.backgroundColor = "red";};}}</script>
</head>
<body><table><caption>考试成绩表</caption><tr><td>小明</td><td>80</td><td>80</td><td>80</td></tr><tr><td>小红</td><td>90</td><td>90</td><td>90</td></tr><tr><td>小杰</td><td>100</td><td>100</td><td>100</td></tr></table>
</body>
</html>

没点击之前:

点击之后:

11.2查找子元素

firstELementChild:获取第一个子元素节点
lastELementChild:获取最后一个子元素节点

例子1:childNodes与children的比较

例子分析:为啥第一个长度为7,毋庸置疑元素节点有三个,还有四个空白节点,由于每个ul和li,每个li和li之间有一个空格,js会把这些空格当成空白节点,所以长度为7

例子2:

上面代码我们在进行删除的时候,我们发现,我们想要删除一个li元素,必须点两次删除。那肯定是空白文档搞得鬼,我们可以使用使用nodeType属性来判断,这个属性是判断节点类型的,每一个类型的节点nodeType属性值不同

节点类型 nodeType值
元素节点 1
属性节点 2
文本节点 3

那么我们每次删除的时候,先判断节点类型,是文本节点(空白节点属于文本节点)就删除两次,是元素节点就删除一次,如下(点击一次就能删除):

11.3查找兄弟元素

previousSibling:查找前一个兄弟节点
nextSibling:查找后一个兄弟节点
previousElementSibling:查找前一个兄弟元素节点
nextElementSlibling:查找后一个兄弟元素节点

例子:

12.innerHTML和innerText

innerHTML:获取和设置一个元素的内部元素
innerText:获取和设置一个元素的内部文本

例子1:

如果要用innerHTML就比较简单了(本质就是用innerHTML设置一个内部元素)

innerHTML和innerText到底是获取啥的呢,看例子2:


最后一个例子:

我们可以看到innerHTML后面的字符串既然可以换行写,一般情况下是不能换行的,在innerHTML中要把字符串截断分行显示,在每次截断的地方加一个\就行

最后我们再把innerHTML和innerText所表示的内容再举几个例子:

一文搞定JS中的DOM基础与进阶相关推荐

  1. 一文搞定面试中的二叉树问题

    一文搞定面试中的二叉树问题 版权所有,转载请注明出处,谢谢! http://blog.csdn.net/walkinginthewind/article/details/7518888 树是一种比较重 ...

  2. 一文搞定Python中的时间转化

    一文搞定Python中的时间转化 在生活和工作中,我们每个人每天都在和时间打交道: 早上什么时候起床? 地铁几分钟来一趟? 中午什么时候开始午休? 明天是星期几? 距离上次买衣服已经2个月呢? 领导让 ...

  3. 一文搞定Pandas中的数据合并

    一文搞定pandas的数据合并 在实际处理数据业务需求中,我们经常会遇到这样的需求:将多个表连接起来再进行数据的处理和分析,类似SQL中的连接查询功能. pandas中也提供了几种方法来实现这个功能, ...

  4. 一文搞定JS事件基础与进阶

    1.事件简介 2.事件的调用方式         在script标签中使用         在元素中调用 3.鼠标事件         鼠标点击         鼠标移入移除         鼠标按住 ...

  5. 一文搞定代码中的命名

    导语 Phil Karlton 曾经说过:计算机科学领域只有两件难事:缓存失效和命名.而命名又是写出整洁代码基础中的基础,本文的副标题其实是<关于命名的读书笔记>,自己在学习过程中的整理出 ...

  6. import 快捷键 自动调整顺序_一文搞定PPT中的快捷键

    不知道大家有没有见到过会PS的同学工作时的场景:一手鼠标移动.指点,另一手在键盘上噼里啪啦按键,屏幕上肉眼可见的速度出现了他们的作品. 操作速度非常快,非常让人羡慕他们的熟练程度. 他们对PS的快捷键 ...

  7. wpf怎么让grid表格中元素显示到最顶层_一文搞定PPT中的快捷键

    点击上方"锦乡悦堂",一起愉快的学习吧! 不知道大家有没有见到过会PS的同学工作时的场景:一手鼠标移动.指点,另一手在键盘上噼里啪啦按键,屏幕上肉眼可见的速度出现了他们的作品. 操 ...

  8. 一文搞懂JS中的赋值·浅拷贝·深拷贝

    前言 为什么写拷贝这篇文章?同事有一天提到了拷贝,他说赋值就是一种浅拷贝方式,另一个同事说赋值和浅拷贝并不相同.我也有些疑惑,于是我去MDN搜一下拷贝相关内容,发现并没有关于拷贝的实质概念,没有办法只 ...

  9. 【深度学习】一文搞定面试中的优化算法

    深度学习各类优化器 借用古代炼丹的一些名词,我们可以把训练模型中的数据比做炼丹药材,模型比做炼丹炉,火候比做优化器.那么我们知道,同样的药材同样的炼丹炉,但是火候不一样的话,炼出来的丹药千差万别,同样 ...

最新文章

  1. Java 比较两个日期的方法
  2. 在python中下列代码的运行结果是print abc_python与数学
  3. 浙江丽水学院计算机专业,2019丽水学院专业排名
  4. python基本语句及其意思_Python语法基础(1),一
  5. php用wordanalysis抓取姓名_利用vba查询/抓取 外部数据
  6. 栈溢出笔记1.5 换一个汇编工具
  7. 共享的网络如何让自己比别人快_ipfs网络的分布式数据是如何做到数据共享的?...
  8. 阿里健康App更名为“医鹿”,加入阿里动物园式命名
  9. python 数据驱动接口自动化框架_利用Python如何实现数据驱动的接口自动化测试...
  10. C#保存PictureBox或Bitmap图片为bmp|png|gif|jpg格式
  11. Windows Server 2008 (IIS)
  12. oracle怎么看alter日志,Oracle 11g 日志alter文件位置
  13. 这些最真实的 “猥琐程序员”,今天必须曝光!
  14. win10+ubuntu双系统下,完美卸载ubuntu
  15. Spring Cloud Gateway — 网关基本功能API暴露
  16. PHP WebShell源码下载(1)
  17. cad快看_CAD三维这样材质贴图,你学会了吗 ?
  18. PowerManager深入分析
  19. 60个Vue常见问题汇总及解决方案
  20. C语言>>8 0xFF; 0xFF;作用

热门文章

  1. 剧本杀,继狼人杀之后的下一个风口
  2. 图的基本操作及其相关应用
  3. 怎么把PDF文件空白页删除
  4. HTTP协议(5)HTTP请求和响应
  5. mysql 开发进阶篇系列 32 工具篇(mysqladmin工具)
  6. 验证Node和npm是否安装成功
  7. [译]Front-end-Developer-Interview-Questions
  8. SQL重复记录查询(转载)
  9. 稳定和高质量是最好的选择
  10. eclipse rcp应用程序重启