.getElementById()和.innerHTML()如何在HTML和DOM之间架起桥梁?

Rob*_*bin 5 javascript

我多年来一直在编写Javascript,但刚才意识到我并不完全理解这些"HTML-y"方法实际上是如何与DOM交互的.

我的假设是,当HTML被解释为DOM时,浏览器会保留关于哪个HTML元素成为哪个DOM节点的引用.

因此,.getElementById当您选择元素时,浏览器会通过引用返回相关节点.为什么不这样做.getNodeById而且更正确?

我的假设是.innerHTML浏览器在运行时将其解释为DOM.但是,在像IE7这样的旧浏览器中,.innerHTML不能用于创建表节点.这告诉我,它原本只是为了修改现有节点的文本属性,但它似乎很奇怪,它存在,我们不只是使用.innerText.

我想我只是对一些Javascript历史感到困惑.

Ben*_*aum 5

那么,事情是,像.innerHTML.getElementById没有真正JavaScript对象都没有.它们是语言规范所称的"主机对象" - 它是FFI的一种形式..getElementById在大多数浏览器中调用时会发生的情况是,字符串从JS字符串编组到DOM字符串,然后传递给C++代码.

事实上,他们可以拥有他们喜欢的任何语义 - 语言不能保证他们的行为方式(对于其他DOM对象,如定时器和XHR也是如此).

  • @AmitJoki特别(双关语)[在规范中](http://es5.github.io/#x4.3.8),如果你搜索规则的那个词经常出现在那里.一个有趣的事实是,ES5甚至不知道线程或异步,它与此无关 - 语言规范中没有任何关于异步性的内容:D(随ES6和本机承诺而变化) (2认同)