DOM操作

大纲

  1. DOM Document节点
  2. Document节点属性
  3. Document节点操作页面元素

DOM Document节点

DOM全称为Document Object Model,即文档对象模型。它是一套用来管理控制html文档的规则。而Document节点则是一种具象化的表现形式。

假设我们把整个html文档看成是一个对象,那么这个对象就是Document节点。而我们如何操作控制这个对象的标准,就是DOM。

dom中规定html页面中的所有元素都是节点。

document节点又被叫做document对象。每个载入浏览器的HTML文档都会称为document对象。document对象使我们可以从脚本中对HTML页面中的所有元素进行访问。
document是html文档的根节点,每张网页都有自己的document节点。window.document属性就指向这个节点。也就是说只要浏览器开始载入HTML文档,这个节点对象就存在了,可以直接调用。

滚动标题案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>滚动标题测试document</title>
</head>
<body>
<script>
    setInterval(function (){
        var docTitle = document.title;
        var titleArr = docTitle.split('');
        titleArr.push(titleArr.shift());
        docTitle = titleArr.join('');
        document.title = docTitle;
    },1000);
</script>
</body>
</html>

Document节点属性

  1. 返回文档内部的某个节点。
    doctype、documentElement、body、head;
  2. 返回文档指定信息。
    documentURL、URL、domain、lastModified、location、title、readyState;
  3. 返回文档内部特定节点的集合。
    anchors、forms、images、links、scripts;

doctype

对于HTML文档来说document对象一般有两个子节点,第一个子节点就是doctype。
doctype节点是一个对象,包含了当前文档类型信息。如果网页没有声明DTD,该属性返回null。

document.doctype

documentElement

document.documentElement

表示当前文档的根节点,通常是document节点的第二个子节点,紧跟在document.doctype节点后面。对于HTML网页,该属性返回HTML节点。

body

document.body

body属性返回当前文档的body或frameset节点,如果不存在这样的节点,就返回null。
这个属性是可写的,如果对其写入一个新的节点会导致原有的所有子节点被移除。

head

head属性返回当前文档的head节点。如果当前文档有多个head,则返回第一个。

document.head

documentURI

document.documentURI

documentURI属性返回当前文档的网址,documentURI属性所有文档都具备。

URL

URL属性返回当前文档的网址。URL属性只有HTML文档才具备。

document.URL

IE浏览器不支持documentURI属性
document.documentURI===document.URL //true

domain

domain属性返回当前文档的域名。

document.domain //www.baidu.com

lastModified

lastModified属性返回当前文档(网页)最后修改的时间戳,格式为字符串。

document.lastModified //10/21/2021 15:24:36

lastModified属性的值是字符串,所以不能用来直接比较。如果想要比较两个文档谁的日期更新,需要用转成时间戳格式才能进行比较。

Date.parse('10/21/2021 15:24:36'); //1634801076000

Date.parse方法能够将时间格式字符串转换成时间戳格式。

location

location属性返回一个只读对象,提供了当前文档的URL信息。

语法说明
document.location.href返回完整的URL
document.location.protocol返回当前遵守的协议
document.location.host返回当前页面域名+端口号
document.location.hostname返回当前域名
document.location.port返回当前页面端口号,如果不存在则返回空
document.location.pathname返回当前页面在服务器中的路径
document.location.search返回当前页面URL中的查询字符串
document.location.assign(‘www.baidu.com’);跳转到另一个网址

location中有关的其他内容

以下方法效果相同,都能够改变当前页面的url:

location.assign('https://www.baidu.com');
window.location='https://www.baidu.com';
location.href='https://www.baidu.com'; //常用
reload():重新加载当前显示的页面
location.reload(false); //优先从本地缓存重新加载
location.reload(true);  //优先从服务器重新加载

title

title属性返回当前文档的标题,该属性是可写的。

document.title

characterSet

返回渲染当前文档的字符集

document.characterSet

readyState

返回当前文档的状态

状态说明
loading加载HTML代码阶段(尚未完成解析)
interactive加载外部资源阶段
complete全部加载完成
document.readyState
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script>
        console.log(document.readyState);
        var timer = setInterval(function (){
            if (document.readyState=='complete'){
                console.log('加载完成');
                clearInterval(timer);
            }
        },20)
    </script>
</body>
</html>

返回文档内部特定元素的集合

这些集合都是动态的,原节点又任何变化会立刻反映在集合中。

语法说明
anchors网页中所有指定了name属性的a节点元素
forms网页中所有表单
images网页中所有图片
links网页中所有链接元素(即带有href属性的a标签)
scripts网页中所有的脚本

Document节点操作页面元素

  1. 选中页面元素
  2. 创建页面元素
  3. 操作页面元素属性

[querySelector()]

返回匹配指定的CSS选择器的元素节点。如果有多个节点满足匹配条件则返回第一个匹配的节点,如果没有发现匹配的节点则返回null。

querySelector是匹配的选择器,那么如果是选择器为id时的参数应该是’#id’;

document.querySelector('#dl');

[querySelectorAll()]

用来选中页面元素,根据指定的选择器进行筛选。如果有多个元素满足条件,则返回这些元素构成的集合。

document.querySelectorAll('#dl');

返回的结果是一个节点列表,不是数组,但能够像数组一样使用列表
如果查找失败不是返回null,而是返回一个空的节点列表

其他选择元素方式

方法说明
getElementById返回匹配指定ID属性的元素节点
getElementsByTagName返回所有指定标签的元素
getElementsByClassName返回符合指定类名的所有元素
getElementsByName用于选择拥有name属性的HTML元素

创建页面元素节点、属性

[createElement()]生成html元素节点

var p = document.createElement('p');
p.innerText='这是一个p标签';
document.body.appendChild(p);

因为直接创建一个按钮根本没办法直观看到(仅存在于内存中),因此通过.appendChild方式添加到body当中。.appendChild()方法的作用能够将代码创建的元素添加到指定位置。

[createTextNode()]生成文本节点,参数为所要生成的文本节点的内容

var p = document.createElement('p');
var textNode = document.createTextNode('这是一个文本节点');
p.appendChild(textNode);
document.body.appendChild(p);

[createAttribute()]生成一个新的属性对象节点,并返回它

var p = document.createElement('p');
var textNode = document.createTextNode('这是一个文本节点');
p.appendChild(textNode);
var attr = document.createAttribute('align');
attr.value = 'center';
p.setAttributeNode(attr);
document.body.appendChild(p);

操作页面元素属性

元素节点特性方法
getAttribute('属性名');
setAttribute('属性名','属性值');
removeAttribute('属性名');
var div1 = document.querySelector('#div');
  div1.setAttribute('style','height:100px;width;100px;background-color:blue');
  console.log(div1.getAttribute('style'));
  // div1.removeAttribute('style');
元素节点的style属性
var divStyle = document.querySelector('#div').style;
  divStyle.backgroundColor = 'blue';
  divStyle.height = '100px';
  divStyle.width = '100px';
  divStyle.cssFloat = 'left';

style对象中的样式与元素style属性中的样式名是一一对应的,但是需要一点点改写规则:

  1. 将横杠从CSS属性名中去除,然后将横杠后的第一个字母大写。
  2. CSS属性名是javascript保留字的,在属性名之前需要加上字符串’css’。
  3. style对象的属性值都是字符串,而且包括单位。
元素节点的style属性的cssText写法
var divStyle = document.querySelector('#div').style;
divStyle.cssText = 'background-color:blue;height:100px;width:100px';

删除整个style属性可以用(divStyle.cssText="";)这种写法。
cssText对应的是HTML元素的style属性,所以不用改写CSS属性名。

元素节点的style属性方法
  1. setProperty(propertyName,value)
  2. getProperty(propertyName)
  3. removeProperty(propertyName)
var divStyle = document.querySelector('#div').style;
divStyle.setProperty('background-color','red');
divStyle.getPropertyValue('background-color');
divStyle.removeProperty('background-color');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值