DOM(文档对象模型)

DOM的概述:DOM(document object model)是一个文档对象模型,是用于操作对应的html文档的,DOM会遵循文档流,属于同步的操作。DOM是W3C(万维网联盟)的标准。它允许程序和脚本动态地访问和更新文档的内容、结构和样式。

DOM的分类:

    1、document dom操作中最大的对象(表示当前操作的html文档)

    2、element 元素对象 (表示的是对应的标签元素)

    3、attribute 属性对象 (表示的所有的html标签里面的属性)

    4、text 文本对象 (表示在html代码里面写的所有的文本)

document (文档对象)(*)

相关的方法:

1、获取(通过对应的标识来获取element元素)

document.getElementById 通过id获取对应的元素(Element)

//通过对应的id获取相关元素对象 返回的是一个element对象

var box=document.getElementById('box')

document.getElementsByClassName 通过className获取 (HTMLCollection)

//通过对应的class获取相关元素对象数组 (HTMLCollection (伪数组 具备下标 具备length))

var contents=document.getElementsByClassName('content')

console.log(contents);//获取HTMLCollection

console.log(contents[0]);//获取第一个匹配的元素

document.getElementsByTagName 通过标签名获取(HTMLCollection)

//通过标签名获取对应的元素对象数组

var div=document.getElementsByTagName('div')

console.log(div);//HTMLCollection

console.log(div[0]);//获取第一个匹配的元素

document.getElementsByName 通过name属性获取 (NodeList)

//根据name属性名来获取对应的元素(表单标签)NodeList

console.log(document.getElementsByName('sex'));

document.querySelector 通过选择器获取第一个 (Element)

//根据对应的选择器获取 id # class . 标签 标签名 返回的都是元素对象

//querySeletor 获取匹配选择器的第一个元素

console.log(document.querySelector('#box'));//返回匹配的元素对象

console.log(document.querySelector('.content'));//返回第一个找到的元素

console.log(document.querySelector('div'));//返回第一个找到的元素

document.querySelectorAll 通过选择器获取所有(NodeList)

//根据对应的选择器获取所有匹配的 NodeList的伪数组

console.log(document.querySelectorAll('#box'));

console.log(document.querySelectorAll('.content'));

console.log(document.querySelectorAll('div'));

document.getRootNode  获取根节点(Node)

//根节点

console.log(document.getRootNode());

2、创建的相关方法 创建对应的节点对象

document.createElement 创建元素节点

//创建一个元素 传递对应的标签名

var element=document.createElement('div')

document.createAttribute 创建属性节点

//创建属性 id = 'box' 传递属性名

//创建一个id属性 默认值伪空字符串

var attr=document.createAttribute('id')

//给当前属性对象指定对应的属性值

attr.value='hello world'

document.createTextNode 创建文本节点

//创建文本节点 传递的参数是显示的文本

var text=document.createTextNode('hello')

扩展:NodeList和HTMLCollection的区别:

    1、NodeList里面的存储以键值对存储。

    2、Nodelist是返回节点的集合,而nodelist里面也有数组,因此元素也是节点的一种,也就是元素节点。

    3、HTMLCollection是html元素的集合,是一个元素,是节点的一种,并且元素节点可以包含很多的节点, 因此我们可以理解为HTMLCollection是Nodelist集合的一种。

相关的属性:

获取属于文档的相关内容

    1、document.body 获取body

    2、document.head 获取head

    3、document.froms 获取froms (返回一个HTMLCollection)

Element 元素对象(*)

相关的方法:

1、获取的方法(在元素里面获取元素)(跟对应的document的获取元素方法一致)

    element.getElementById()

    element.getElementsByClassName()

    element.getElementsByName()   等等....

注:链式调用

//获取对应的element元素对象

varbox=document.getElementById('box')

//形成链式调用

varb=document.getElementById('box').getElementsByClassName('link')[0].getElementsByTagName('b')[0]

2、添加的方法 (在元素里面添加元素或者是添加text到对应的元素中去)

    append (追加多个,支持里面传入字符串(字符串会被识别为文本))(追加到末尾的方法)

    appendChild (追加一个,只支持node对象)(追加到末尾的方法)

    insertBefore 插入元素到某个子元素之前 (参数1需要传入的元素、参数2子元素),不能对孙子元素进行操作

    insertAdjacentElement 插入element

    insertAdjacentHTML 插入HTML代码

    insertAdjacentText 插入文本

3、删除方法

remove 删除自身

//删除自己 里面内容都删除

box.remove()

removeChild 删除子元素

//删除子元素 传递对应的子元素

box.removeChild(link)

4、修改方法 (既可以替换元素 也可以替换文本)

replaceChild 一对一替换(第一个新的节点,第二个对应的子节点)

var btn = document.createElement('button')

var text = document.createTextNode('我是文字')

//第一个新的节点 第二个对应的子节点

box.replaceChild(btn,link)

replaceChildren 替换所有 (可以传递多个参数 支持字符串)

//替换里面所有的 变成你传入的

box.replaceChildren('你好','hello')

5、克隆的方法

cloneNode  克隆对应的元素(传递的参数是一个布尔类型的值,为true表示深度克隆,为false表示浅克隆(false))

var box = document.querySelector('div')

var element = box.cloneNode()//只克隆对应的第一次 默认为false

console.log(element);//<div></div>

var element = box.cloneNode(true)//只克隆所有的内容包含对应的里面文本和元素及相关事件

6、属性操作的相关方法 (对于所有的属性都可以进行操作)

获取 getAttribute(attrName)

//获取属性 通过属性名来获取属性值 后面带NS 表示namespace 命令空间

//传递的是属性名

var attrVal = box.getAttribute('hello')

console.log(attrVal);//hi

设置 setAttribute(attrName,attrValue)

//设置属性

//第一个参数属性名 第二个参数为属性值(自动发生隐式转换)

box.setAttribute('age',18)//添加

box.setAttribute('age','20')//修改

删除 removeAttribute(attrName)

//移除属性 根据属性名来移除对应的属性 对于本身带的和后续添加的都可以进行操作

box.removeAttribute('hello')

box.removeAttribute('age')

相关的属性:

1、基础属性(元素对象的相关属性,不赋值就是获取,赋值就是设置)

id 属性 (获取/设置 id值)

var div =  document.querySelector('div')

console.log(div.id); //获取对应的id属性值

div.id = 'hi'

className 属性 (获取/设置 class值)

console.log(div.className); //获取对应的class名字

div.className = 'box'

style 属性 (获取对应的一个样式对象 / 设置相关样式)

console.log(div.style); //获取一个样式对象 里面相关属性就是对应的css的样式名

console.log(div.style.backgroundColor); //获取对应的背景颜色的值

div.style.backgroundColor = 'red' //设置当前的背景颜色为红色

title 属性 (获取/设置 title属性)

console.log(div.title); //获取对应的title属性值

div.title = '你好'

tagName 属性 (只读属性)

//不能进行赋值操作

console.log(div.tagName); //获取对应的标签名 大写的标签名(全大小) (只读)

innerHTML 属性 (显示的html内容 编译对应的html代码)

console.log(div.innerHTML); //获取里面显示的html代码 (可以识别html代码)

div.innerHTML = '<a>改变的内容</a>'

innerText 属性 (显示的文本 不能编译html代码)

console.log(div.innerText); //获取对应显示的文本 (全部当作文本)

div.innerText = '<a>改变的内容</a>'

2、节点相关属性(只读属性)

previousElementSibling 前面的元素

//前面的元素

console.log(div.previousElementSibling);

nextElementSibling 后面的元素

//后面的元素

console.log(div.nextElementSibling);

parentElement 父元素

//获取父元素 parentElement 子元素 children

console.log(div.parentElement);//获取到是一个元素

children 子元素集合 (HTMLCollection)

//获取子元素 children

console.log(div.children);//获取到的是一个元素数组 伪数组 HTMLCollection

3、相关获取元素内属性节点集合的属性(只读属性)

attributes  获取元素内所有的属性节点的属性,返回的是一个伪数组 nameNodeMap (伪数组 map他是存储键值对)

Node

DOM中的节点分类

    1、元素节点  element

    2、属性节点  attributeNode

    3、文本节点  textNode

节点相关的属性

1、节点划分的属性 (*)

    nodeName  节点名

    nodeType  节点类型

    nodeValue 节点值

2、节点关系的属性 (*)

父子关系:

    parentElement 父元素

    parentNode 父节点

    childNodes 所有的子节点(包含元素节点和文本节点)

    children 所有的元素节点

兄弟关系:

    previousElementSibling 上一个元素节点

    previousSibling 上一个节点

    nextElementSibling 下一个元素节点

    nextSibling 下一个节点

第一个子节点和最后一个子节点

    firstChild 第一个子节点

    firstElementChild  第一个子元素节点

    lastChild  最后一个子节点

    lastElementChild 最后一个子元素节点

节点相关的方法 (*):

    replaceChild 替换子节点

    appendChild 添加子节点

    removeChild 删除子节点

    insertBefore 插入节点到子节点前面

    cloneNode 克隆节点

    replaceChildren 替换所有子节点

    append 添加多个子节点

    remove 移除自己及所有的子节点

操作属性节点的方法:

    setAttributeNode (属性节点 Attribute对象)

    getAttributeNode (返回的是一个属性节点 Attribute)

    removeAttributeNode (根据对应的属性节点删除)

删除空文本节点的相关方法:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容