什么是DOM?以及从DOM中获取的对象是什么?

4

我了解一些JavaScript,最近开始尝试通过Code Academy课程将它与HTML结合起来。以下是代码:

function sayHello(name){
    document.getElementById("result").innerHTML = 'Hello ' + name + '!';
}

上述代码中的“document”是指DOM吗?

这意味着getElements是document的一个属性(函数),而innerHTML是getElements函数的一个函数……对吗?

如果我理解正确,那么DOM对象如何具有JavaScript属性/函数呢?


https://developer.mozilla.org/en-US/docs/DOM - Bergi
5个回答

12

“document”是DOM吗

简短回答

是的,从根本上讲它就是。

稍微长一点的回答

文档对象模型(DOM)是浏览器向JavaScript运行时公开的,以允许JavaScript代码操纵页面(其节点和相关元数据)。document是DOM的一部分。

DOM如何具有JavaScript属性

简短回答

它们不会。

稍微长一点的回答

DOM实际上并没有在JavaScript中进行管理(至少目前还没有)。通常情况下,它由一个单独的引擎来管理,该引擎用一种低级语言(例如C++或Mozilla的Servo项目中的Rust)编写。JavaScript运行时也是用一种低级语言编写的(再次提到,最有可能是C++),DOM的某些属性被暴露给JavaScript运行时,就好像它们是本地的JavaScript对象一样。它们实际上不是本地的JavaScript对象,这使得各种有趣的事情成为可能......并且通常会导致这些DOM对象的行为不总是像您预期的“真正”的JavaScript对象那样(例如,在IE 8中,querySelectorAll的typeof返回“object”,而不是像合理预期的那样返回“function”)。

2
好的回答。如果实际上参考了定义DOM的W3C推荐,我会授予额外的奖励分数。 - keshlam
1
@keshlam - 它已经作为HTML5最新候选推荐的链接存在了 :-) 谢谢! - Sean Vieira
1
重新表述以更清晰:我希望我能给你额外的积分,因为你实际上提到了定义DOM的W3C推荐。 (现在我可以通过点赞您对我不清楚评论的回复来做到这一点。) - keshlam

3

文档对象模型是一种与HTML交互的模型。它们没有"javascript属性"或"函数",javascript函数是在通过DOM找到的HTML元素上执行的。

getElementbyID

getElementById()是javascript中的一个函数,它基于DOM检索HTML元素。下面是DOM的外观,也是javascript执行上述函数的方式。

http://www.w3schools.com/js/js_htmldom.asp

enter image description here


小心引用w3schools.com。他们可能已经改进了,但我过去花了太多时间重新教育人们,他们的文章误导了他们。 - keshlam

2

DOM可以被视为一个接口(由布局引擎如Google Chrome和Firefox中的Gecko提供),它在HTML和任何想要使用HTML的其他语言(例如JavaScript)之间建立连接。假设明天出现了一种新的语言(类似于JavaScript,但是在浏览器中实现了其引擎,就像JavaScript在Google Chrome中有V8引擎一样),它想要使用HTML,那么他们只需要使用DOM接口(在浏览器内部)进行访问,而不必编写一些繁重的低级代码(在该语言的引擎内部)。这使得他们更容易集中精力处理自己的逻辑。


@ZachSmith,正确的浏览器需要整合一个新语言引擎,并使用DOM_Interface代替编写相同低级代码的方式。 - Ashish Verma
能否从外部访问浏览器的DOM接口? - Zach Smith
@ZachSmith 不,DOM并不一定需要成为浏览器的一部分。在各种编程语言中都有相当多的独立实现,我们可以参考维基百科 - Bergi
谢谢@Bergi。独立的DOM实现有什么用例?我想我曾经为测试目的使用过其中之一(phantom.js)。但我的理解是DOM严格用于HTML表示? - Zach Smith
@ZachSmith DOM适用于各种XML文档,并可用于具有或不具有可视表示的操作。 - Bergi
显示剩余2条评论

2

Close。在DOM(文档对象模型)中,document是根元素。DOM是当前文档的内存表示。

调用document.getElementById()返回一个HTML元素,该元素具有属性innerHTML。向innerHTML写入将告诉浏览器将字符串呈现为该元素的子元素。

DOM对象没有与JavaScript相关的属性或属性。 JavaScript只是访问DOM属性的一种方式。


1

DOM是文档对象模型,即整个文档都是对象的层次结构,其中Window是所有对象的父级。

它提供了文档的结构化表示(树状结构),并定义了一种程序可以访问该结构以更改文档结构、样式和内容的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接