DOM编程

JS七种数据类型

number,string,bool,symbol,null,undefined,object

JS五个falsy值

0,NaN,'',null,undefined

DOM定义

含义:Document Object Model 文档对象模型;浏览器往window上加一个document,JS就可以操作网页

获取元素(element),也叫标签(tag)
  • window.idXXX 或者 idXXX
  • document.getElementById('idXXX')
  • document.getElementsByTagName('div')[0]
  • document.getElementsByClassName('red')[0]
  • document.querySelector('#idXXX')
  • document.querySelectorAll('#idXXX')[0]
  • document.querySelectorAll('.red')[0]
获取特定元素
  • 获取html元素:document.documentElement
  • 获取head元素:document.head
  • 获取body元素:document.body
  • 获取窗口(窗口不是元素):window
  • 获取所有元素:document.all

节点Node

包括(常用):
1表示元素Element,也叫标签Tag
3表示文本
8表示注释Coment
9表示文档Dcument
11表示文档片段DocumentFragment

cosole.dir(div)看原型链
第一层原型:HTMLDIVElement.prototype(这里包含div所有共有属性)
第二层原型:HTMLElement.prototype(这里面所有HTML标签共有属性)
第三层原型:Element.prototype(这里所有XML,HTML标签共有属性,不会以浏览器只能展示HTML)
第四场原型:Node.prototype(这里面所有节点共有属性,节点包括XML标签文本注释,HTML标签文本注释等)
第五层原型:EventTarget.prototype(里面最重要函数是addEventListener)
第六层原型:Object.prototype

div原型链

节点的增加

  • 创建一个标签节点
1. let div1=document.createElement('div')
2. document.createElement('style')
3. document.creatElement('script')
4. document.createElement('li')
  • 创建一个文本节点
text1=document.createTextNode('你好')
  • 标签里面插入文本
 div1.appendChild(text1)
 div1.innerText='你好' 或 div1.textContent='你好'
  • 插入页面

创建标签默认处于JS线程中
必须把它插到head或者body立,才会生效
document.body.appendChild(div1)
在已有页面中元素.appendChild(div)

节点的删除

两种方法:

旧方法:parentNode.childChild(节点)
新方法:childNode.remove() //IE不支持

节点的更改

  1. 改class: div.className='red blue'
  2. 改class: div.classList.add('red')
  3. 改style: div.style='width:100px;color:blue'
  4. 改style的一部分: div.style.width='200px'
  5. 大小写:div.style.backgroundColor='white'
  6. 改data-*属性:div.dataset.x='frank'
读标准属性
  • div.classList/a.href
  • div.getAttribut('class')/a.getAttribut('href')
    两种都可以用,但是值可能会稍微有点不同
改事件处理函数

div.onclick默认null
默认点击,div不会有任何事情发生
但如果把div.onclick改成一个函数fn
那么点击div的时候,浏览器就会调用这个函数
并且是这样被调用fn.call(div.event)
div会被当成this
event则包含了点击事件的所有信息,如坐标
div.addEventListener是div.onclick的升级版(多个函数)

节点改内容

1.改文本内容

div.innerText='xxx'
div.textContent='xxx'

2.改HTML内容

div.innerHTML='<strong>重要内容</strong>'

3.改标签

div.innerHTML=''    //先清空
div.appendChild(div2)  //再加内容

4.改爸爸

newParent.appendChild(div)

节点的查询

查爸爸

node.parentNode 或 node.parentElement

查爷爷

node.parentNode.parentNode

查子代

node.childNodes 或 node.children

查兄弟姐妹

node.parentNode.childNodes  //排除自己
node.parentNode.children   //排除自己

查老大

node.firstChild 或 node.children[0]

查老幺

node.lastChild

查看上一个哥哥/姐姐

node.previousSibling

查看下一个弟弟/妹妹(注意这里可能查到文本节点)

node.nextSibling

遍历一个div里面所有的元素

travel = (node.fn)=>{
   fn(node)
    if(node.children){
      for(let i=0;i<node.children.length;i++){
        travel(node.children[1],fn)
      }
    }
}
travel(div1,(node)=>console.log(node))

跨线程操作

属性同步

  • 标准属性
  1. 对div1的标准属性修改,会被浏览器同步到页面中,比如id,className,title等
  2. data-*属性 (启示:如果有自定义属性,想被同步到页面中,请使用data-作为前缀)
  • 非标准属性
    对非标准的属性的修改,则只会停留在js线程中,不会同步到html里,比如xxx=''
Property 与 Attribute

property属性:JS线程中div1的所有属性,叫做div1的property
Attribut属性:渲染引擎中div1对应标签的属性,叫做attribute
区别:大部分时候,两者的值是相等的;但如果不是标准属性,那么它们一开始时相等,但attribute只支持字符串,而property支持字符串,布尔等类型

回顾

1.假设页面中有如下元素

<div id="test" class="red">demo</div>

获取该 div 元素的代码:

  1. document.getElementById('test')
  2. document.getElementsByClassName('red')[0]
  3. window.test
  4. document.querySelector('#test')
  5. document.querySelectorAll('#test')[0]

2.关于节点(Node) 、元素(Element)、标签(Tag) 的关系描述:

  1. 节点包括元素和文本等
  2. 元素就是标签,叫法不同而已

3.要删除一个节点 x

1) x.parentNode.removeChild(x)
2) x.remove()

4.获取 x 元素的 class 属性

1) x.className
2) x.getAttribute('class')

5.将 div 的宽度设置为 100 像素

div.style.width = '100px'

6.关于以下代码,下列说法正确

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

推荐阅读更多精彩内容