2 Fork me on GitHub 6

JavaScript 的DOM操作详解

JavaScript 的DOM操作详解

 

内容概要

  • DOM之查找标签
    • 基本查找
    • 间接查找
  • 节点操作
  • 获取值操作
  • class操作
  • 样式操作
  • 事件
  • 内置参数this
  • 事件练习

内容详细

DOM操作

DOM(Document Object Model)即文档对象模型,是一种处理HTML和XML文件的标准API。

DOM提供了对整个文档的访问模型,将文档作为一个树形结构,树的每个结点表示了一个HTML标签或标签内的文本项。DOM树结构精确地描述了HTML文档中标签间的相互关联性。

DOM模型不仅描述了文档的结构,还定义了结点对象的行为,利用对象的方法和属性,可以方便地访问、修改、添加和删除DOM树的结点和内容。

image

DOM标准规定HTML文档中的每个成分都是一个节点(node):

  • 文档节点(document对象):代表整个文档
  • 元素节点(element 对象):代表一个元素(标签)
  • 文本节点(text对象):代表元素(标签)中的文本
  • 属性节点(attribute对象):代表一个属性,元素(标签)才有属性
  • 注释是注释节点(comment对象) 

DOM的作用

通过上面的详细介绍,我想小伙伴们都差不多知道DOM的作用了。就是为了让JavaScript可以对文档中的标签、属性、内容等进行 访增删改 操作。

查找标签

1、基本查找(核心)

document.getElementById           根据ID获取一个标签
document.getElementsByClassName   根据class属性获取
document.getElementsByTagName     根据标签名获取标签合集

/*
如果我们的js代码需要页面上某个标签加载完毕
那么该js代码应该写在body内部最下方或者引入外部js文件
*/

2、间接查找

parentElement            父节点标签元素
children                 所有子标签
firstElementChild        第一个子标签元素
lastElementChild         最后一个子标签元素
nextElementSibling       下一个兄弟标签元素
previousElementSibling   上一个兄弟标签元素

节点操作

1、增

var aEle = document.createElement('a');  // 添加标签

aEle.setAttribute('href','https://www.mmzztt.com/')  // 添加属性

aEle.innerText = '好不好看?'  // 添加内容文本

document.getElementsByTagName('p')[0].appendChild(aEle)  // 动态添加该标签到页面中

2、删

document.body.removeChild(div)

3、改

获取文档的标签,如果属性原来有值,便是修改操作

var pEle = document.getElementById('p1')
pEle.setAttribute('href','https://www.mmzztt.com/')
pEle.innerText = '好不好看?'  // 添加内容文本

4、查

document.getElementsByTagName('p')

imgEle.getAttribute('title')  // 获取标签属性

5、innerText 与 innerHTML 的区别

innerText
	不加赋值符号是获取内部文本
    加了赋值符号是设置内置文本
    // 不可以识别HTML标签
innerHTML
	不加赋值符号是获取内部标签+文本
    加了赋值符号是设置内置标签+文本
    // 可以识别HTML标签

获取值操作

1、普通的文本数据获取

标签对象.value

2、特殊的文件数据获取

标签对象.value  '''仅仅获取一个文件地址而已'''
标签对象.files[0]  '''获取单个文件数据'''
标签对象.files  '''获取所有文件数据'''

class操作

classList  查看所有的类
classList.remove(cls)  删除指定类
classList.add(cls)  添加类
classList.contains(cls)  存在返回true,否则返回false
classList.toggle(cls)  存在就删除,否则添加

样式操作

模式:标签对象.style.属性名 = 属性值

obj.style.backgroundColor="red"

JS操作CSS属性的规律:

1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:

obj.style.margin
obj.style.width
obj.style.left
obj.style.position

2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:

obj.style.marginTop
obj.style.borderLeftWidth
obj.style.zIndex
obj.style.fontFamily

事件

事件的意思,就是使用javascript函数实现HTML页面上的某一些功能

绑定事件就是就是给HTML元素添加自定义的功能

1、主要的事件类型

常用:

onclick        当用户点击某个对象时调用的事件句柄。

onfocus        元素获得焦点。               // 练习:输入框
onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.

onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)

onload         一张页面或一幅图像完成加载。

其它:

onclick        当用户点击某个对象时调用的事件句柄。
ondblclick     当用户双击某个对象时调用的事件句柄。

onfocus        元素获得焦点。               // 练习:输入框
onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)

onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress     某个键盘按键被按下并松开。
onkeyup        某个键盘按键被松开。
onload         一张页面或一幅图像完成加载。
onmousedown    鼠标按钮被按下。
onmousemove    鼠标被移动。
onmouseout     鼠标从某元素移开。
onmouseover    鼠标移到某元素之上。

onselect      在文本框中的文本被选中时发生。
onsubmit      确认按钮被点击,使用的对象是form。

2、绑定事件的方式

  • 方式1
<button onclick="func()">点我</button>
<script>
    function func() {
    alert(123)
}
</script>
  • 方式2
<button id="d1">选我</button>
<script>
    // 1.先查找标签
    var btnEle = document.getElementById('d1')
// 2.绑定事件
btnEle.onclick = function () {
    alert(456)
}
</script>

内置参数 this

this指代的就是当前被操作对象本身,一般在函数体代码内部使用

btnEle.onclick = function () {
    alert(456)
    console.log(this)
}

例子:

var person = {
    firstName: "Penelope",
    lastName: "Barrymore",
    fullName: function () {
        //注意this的使用方式与上文使用“他”这个代词的方式一样:
        console.log(this.firstName + " " + this.lastName);
        //我们也可以这样子写:
        console.log(person.firstName + " " + person.lastName);
    }
}

如果我们像上方示例代码那样子使用person.firstNameperson.lastName,代码就会变得指代不明。假设还有一个叫person的全局变量(不管你知不知道),那么person.firstName就会尝试访问全局变量personfirstName属性,这样子出错时就很难调试了。

this这个引用总是指代对象并储存着它的值(只能指代一个对象),一般都在函数或者对象方法里使用,但是也能用在函数外的全局作用域里。需要注意的是,如果在函数里使用严格模式,全局函数里this的值就是undefined。而在匿名函数里则不会绑定任何对象。

关于this更详细解释参考博客:

https://blog.csdn.net/marcelwu/article/details/78934069?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164482566116780269846653%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164482566116780269846653&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-78934069.pc_search_result_cache&utm_term=javascript+%E5%86%85%E7%BD%AE%E5%8F%82%E6%95%B0+++this&spm=1018.2226.3001.4187

事件练习

onclick单击事件
onfocus聚焦事件
onblur失去焦点事件
onchange文本域变化事件
onload等待...加载完毕后执行的事件
// 定时器
// 数据校验
// 省市联动

定时器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件练习</title>
</head>
<body>
<!--时间模块练习-->
<input type="text" id="d1">
<input type="button" id="btn1" value="开始">
<input type="button" id="btn2" value="停止">
<script>
    var texEle = document.getElementById('d1');
    var btn1Ele = document.getElementById('btn1');
    var btn2Ele = document.getElementById('btn2');
    var t  = null  //设置一个全局变量接收时间开始事件,用于做判断防止开启多个事件函数
    //2、创建时间对象并生成时间
    function addTime(){
        var Ctime = new Date();  // 注意每次都是需要获取新的时间点的
        texEle.value = Ctime.toLocaleString();
    }

    //1、给开始按钮绑定点击事件 注意,多次点击会启动多个点击事件的函数
    btn1Ele.onclick = function (){
        //4、开始事件之前先判断之前是否已经启动过该事件,以免开启了多个事件
        if(!t){
            //3、设置每1秒执行一次添加时间函数,动态效果,把定时任务绑定给全局变量 t
            t = setInterval(addTime, 1000)
        }
    }
    //5、绑定事件停止时间
    btn2Ele.onclick = function (){
        clearInterval(t)
        t = null
    }

</script>
</body>
</html>

注意:

如果某个标签已经有事件了 那么绑定会冲突

 
标签: javascript
posted @ 2022-02-15 17:17  jinggo  阅读(357)  评论(0)    收藏  举报