DOM

DOM到底是啥?

html叫做文档,实际上在内存中是对象object,这种文档和对象一一映射的机制叫做dom。

dom和原型不同并非一开始浏览器就造好的,而是在解析html的过程中边解析边造的。dom是和html绑定的和js好像没关系。浏览器有一个分词器还有一个解析器。分词器会把空格什么去掉然后把html标签拿出来给解析器,然后解析器再调用对应的函数把标签做成节点对象。然后全部做完就是一个dom树了。

那为什么没有dom的时候不同浏览器不兼容?因为标签没有对应的方法把他做成节点。

js的对象都是继承至object,页面的对象都是继承至node。当然node还是继承object的。

html是由Document造出来的,head、body、meta等标签是由Element造出来的,页面中的文本是由Text造出来的。

Document、Element、Text都是特殊的对象,和Aarry、Function、Number、String一样都是对象。

Document.prototype => __proto__:Node => __proto__: EventTarget => __proto__:Object 

Element.prototype => __proto__:Node => __proto__: EventTarget => __proto__:Object

Text.prototype => __proto__: CharacterData =>  __proto__:Node => __proto__: EventTarget => __proto__:Object

显然他们有个公共属性Node



获取节点好像一般都是用ID的,不太用document一层层找下去的吧,一般用docment的都是直接对整个文档操作。

要打出document可以这么操作

要打出文本,得先给它加个id,然后文本是这个id的firstChild


注释也是一个对象,反正几乎所有东西都是对象吧

所以DOM就是把html的节点通过上面这些构造函数,构造出相应的对象。上面说了只要是html标签,head等标签,文本,注释这些。

然后用到标签的时候去调用这个对象就是了。那DOM到底有哪些呢


Element、Text、这些都是有node的公共属性,所以先看看node有哪些属性。直接Node.prototype就行了


问:构造函数怎么把html语言变成对象的?

只要返回一个对象就行了,比如方方自己写了一个creatPerson的构造函数。自带的createElement也是构造函数。


node方法

浅拷贝


深拷贝


深拷贝能拷贝子元素,浅拷贝只拷贝节点,只拷贝这个div标签,标签里面的文字或者儿子都不会拷贝。


Equal两个div看起来是一样的,Same是两个div是同一个。


API看mdn就够了

很多api有点烦记不住,记6个知识点和两个规则:

1.nextsibling或者previousSibling可能会获取到文本节点

2.innerText和textContent有点区别的。面试可能会考

3.nodeType需要记连个值1表示元素,3表示文本。面试可能会考

4.cloneNode()有深拷贝和浅拷贝

5.isSameNode()和isEaualNode()是不一样的

6.normalize使什么变得正常,有点格式化的感觉。

规则:



给页面加文本:


用innerText是可以的,但是有缺点

如果我本来里面是有内容的就会被清空,所以更安全的方法是:


api不会用没关系,反正随便用直到遇到bug就懂了,然后再总结。专家就是在一个小领域之内把所有能踩过的坑都踩过了。


document



anchors被弃用了


我干嘛查api的时候还在浏览器打xxxxx.prototype直接查mdn不就更形象



referer:引荐,没引荐的话会打不开

close() 


document分为三个步骤:open,write,close

当第一个html开始的时候document就open了,然后</script>结束了就close了。

所以上面这个setTimeout(()=>{document.write(3)},1000)延时函数执行的时候script已经执行了。document已经close了。所以关闭以后再执行就要重新打开document,打开的时候就会把原来的覆盖掉。

所以上面的执行顺序是:hello 1 2 然后覆盖只剩3.所以尽量不要用write,因为容易覆盖。



上面4个选择元素的基本上没人用了,着重说一下下面两个的区别。自动化还用上面4个用得很开心


区别在于querySelector返回一个,querySelectorAll返回一个数组,就算只有一个也是返回数组。然后选中你返回的通过数组下标选择。如上面的div[0].classList。这个数组是伪数组。因为他的原型不是__proto__:Array



Element

上面说了document有querySelector,其实Element也是有querySelector所以可以直接div.querySelector因为div是Element创造的啊



作业:
















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