A27-DOM API

DOM

  • MDN
  • 阮一峰
    什么是DOM,DOM最重要的就是要明白它的概念,否则遇到问题也不知道如何下手
    大家都说DOM树,这是一个比喻,易于理解,
    D就是文档,想象它是一个树状的结构(就像之前数据结构里的二叉树那样),树上有着节点(node)
    O就是对象,
    M也就是模型,把D和O做一个一一对应的映射,就是这个模型
    所以DOM就是把文档变成一个对象
    映射

    上图红字
    DOM转化来的js对象里面到底存放什么由DOM标准规定
    比如:
    上图的 head、body、meta、link、h1、p 都是Element的实例
    (中间存在其它函数,F12调试可见,比如document.body就是document.body.proto->HTMLBodyElement.prototype.proto->HTMLElement.prototype.proto->Element.prototype)
    根节点html比较特殊,是由document构造的(DOucment->HTMLDocument,简写)
    至于文本节点则是由

Node Api

Node 属性

记住以下单词;

  • child / children / parent
  • node
  • first / last
  • next / previous
  • sibling / siblings
  • type
  • value / text / content
  • inner / outer
  • element
    然后相互组合
    一部分:childNodes,firstChild,innerText,lastChild,nextSibling,nodeName,nodeType,nodeValue,outerText,ownerDocument,parentElement,parentNode,previousSibling,textContent
<html>
  <head></head>
  <body></body>
</html>

document.body.previousSibling // #text
document.body.previousSibling.previousSibling // <head></head>
docuemnt.body.previousElementSibling // <head></head>
// 为什么previousSibling返回的是文本节点呢,这是因为本来dom是配对xml的,后来强行配对html
// previousSibling是 Node 的属性,previousElementSibling是 Element 的属性
// previousSibling 是本来就有的,previousElementSibling是后来加的
// 类似的还有 nextSibling / nextElementSibling, firstChild / firstElementChild 等等
// 可以在F12中尝试,控制台会显示提示以及该属性属于哪个对象

几个要注意的 Node Api

  • nodeName
    注意这个api很奇葩
    document.body.nodeName // 'BODY
    document.documentElement.nodeName // 'HTML
    document.nodeName不行,必须像上面那样写
    它对所有标签返回名称都是大写
    但是!唯有svg,它返回小写
    document.getElementsByTagName('svg')[0] // 'svg'
    这是因为svg是‘外来的’标签,它是后来新加的,然后就这么小写了……
  • nodeType -MDN
    只读属性 Node.nodeType 表示的是该节点的类型。其所有可能的值请参考节点类型常量.
    它返回一个整数来表示节点的类型
    (之所以这样是因为当年的计算机还没这么发达,而1比element的字节小多了)
    以下几个需知:
    1 元素节点, Eg:<div>、<p>
    3 文本节点, 元素或者属性中实际的文字,比如<p>段落</p>中的段落二字
    9 Document节点,
    11 DocumentFragment节点 // 很特殊的一个节点(暂时我还不清楚,google DocumentFragment优化)
    document.body.nodeType // 1
    document.nodeType // 9
    document.documentElement.nodetype // 1
    document.documentElement.nodeName // 'HTML'
    // 所以document.documentElement才是html,document不是?
    
  • innerTexttextContent -MDN
    区别:
    • textContent 会获取所有元素的内容,包括 <script> 和 <style> 元素,然而 innerText 不会。
    • innerText意识到样式,并且不会返回隐藏元素的文本(设置display:none的元素),而textContent会。
    • 由于 innerText 受 CSS 样式的影响,它会触发重排(reflow),但textContent 不会。
    • 与 textContent 不同的是, 在 Internet Explorer (对于小于等于 IE11 的版本) 中对 innerText 进行修改, 不仅会移除当前元素的子节点,而且还会永久性地破坏所有后代文本节点(所以不可能再次将节点再次插入到任何其他元素或同一元素中)。
  • childNodes -MDN
    Node.childNodes 返回包含指定节点的子节点的集合,该集合为即时更新的集合(live collection)。
    var parent = document.getElementById('parent');
    parent.childNodes.length // 2
    parent.appendChild(document.createElement('div'));
    parent.childNodes.length // 请问现在 length 是多少
    
    // 3
    
    // 与之相反的是 querySelectorAll() ,它返回的是一个静态的 NodeList
    var allDiv = document.querySelectorAll('div>
    allDiv.length // 假设是 2
    document.body.appendChild(  document.createElement('div')  )
    allDiv.length // 请问现在 length 的值是多少???
    // 2
    // querySelectorAll方法不属于 node,是document 和 element 的
    
  • HTMLCollection与NodeList的区别有
    • HTMLCollection实例对象的成员只能是Element节点,NodeList实例对象的成员可以包含其他节点。
    • HTMLCollection实例对象可以用id属性或name属性引用节点元素,NodeList只能使用数字索引引用。
    • HTML DOM 中的 HTMLCollection 是即时更新的(live);
      当其所包含的文档结构发生改变时,它会自动更新。
      NodeList 对象大多数情况下是个实时集合。
      意思是说,如果文档中的节点树发生变化,则已经存在的 NodeList 对象也可能会变化。例如,Node.childNodes 是实时的。
      在另一些情况下,NodeList 是一个静态集合,也就意味着随后对文档对象模型的任何改动都不会影响集合的内容。document.querySelectorAll 返回一个静态的 NodeList。

Node 方法 (如果一个属性是函数,那么这个属性就也叫做方法;换言之,方法是函数属性)

  • appendChild()
  • cloneNode() // 分深、浅拷贝
  • contains()
  • hasChildNodes()
  • insertBefore()
  • isEqualNode() // 看起来相等
  • isSameNode() // 完全相等,可以用 === 来代替
  • removeChild()
  • replaceChild()
  • normalize() // 常规化
    基本看见名字就知道作用,不清楚也可以查MDN。

Document Api -MDN

Document 属性

  • body
  • characterSet
  • childElementCount
  • children
  • doctype
  • documentElement
  • domain
  • fullscreen
  • head
  • hidden
  • images
  • links
  • location
  • onxxxxxxxxx
  • origin
  • plugins
  • readyState
  • referrer
  • scripts
  • scrollingElement
  • styleSheets
  • title
  • visibilityState

Document 方法:

  • close()
  • createDocumentFragment()
  • createElement()
  • createTextNode()
  • execCommand()
  • exitFullscreen()
  • getElementById()
  • getElementsByClassName()
  • getElementsByName()
  • getElementsByTagName()
  • getSelection()
  • hasFocus()
  • open()
  • querySelector()
  • querySelectorAll()
  • registerElement()
  • write()
  • writeln()

Element Api -MDN

关于 DOM API 更多见之后写的常用 API。(待续)

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

推荐阅读更多精彩内容

  • 概述 DOM(Document Object Model)文档对象模型,指的是 XML 文档,需要说明的是,HTM...
    bowen_wu阅读 355评论 0 0
  • 原生DOM接口挺多的,需要花点时间研究下,不过先把基础整好,后面框架估计好学点。 1. DOM是啥 1.1 知识回...
    吴少在coding阅读 1,797评论 0 7
  • 本章内容 理解包含不同层次节点的 DOM 使用不同的节点类型 克服浏览器兼容性问题及各种陷阱 DOM 是针对 HT...
    闷油瓶小张阅读 620评论 0 1
  • 一 下午四点钟,何木趴在蓝色的栏杆上发呆,头顶的天空那么遥远那么湛蓝,远比如今要来的酣畅淋漓。 远处高年级的同学们...
    少女小偷阅读 1,219评论 3 21
  • 和很多人一样,我从小在大城市长大,对野生动植物的了解只限于书本,并没有多少亲自接触的经验,。而在离亚州非常遥远的非...
    茉莉夏依阅读 207评论 0 0