Head First JavaScript 之 DOM

【问题】If some one handed me 一个对象,那我有没有得到这个对象中包含的所有的属性办法?
【回答】

/* 使用for in来遍历得到对象的属性*/

for (var i in car) {
var car = {
};

===================================

不知不觉,我学习《Head First JavaScript》已经来到了DOM这个章节了,虽然在上课的时候,这些已经讲过了,但我在课堂上对这些知识的理解仍不够OK,所以,希望,新的一章能够带给我惊喜吧!

大二第一学期开学之前,我就开始接触了这本书,可以说是这本书带着我入门的,没有它带我入门的话,估计在新学期所要学的JavaScript我会有可能因为是新知识,新挑战而无法轻易接受,更有可能影响一整个学期的心情。幸好,有了这本书,幸好在开学前我接触到了这本书。

这段时间也让我懂得了一些道理,凡事就应该要有备而无患。

下面是我对新章节的笔记:

"DOM"这个初听起来,感觉很高端的样子。我之前在一本叫做《疯狂的程序员》的书中便看到这个词,我以为这是他们行业中某个领域的专有的名词,高大上到我只能仰望。但其实不是这样的。

"DOM"的全称是 Document Object Model. 光从字面上理解起来,就可以发现,我们也随着这个"高大上"的词高大上起来了。

我们知道,HTML是标记语言,一般是静态的页面,而JavaScript是程序设计语言,可以写出有顺序先后,逻辑性强等等的代码,JS(为了方便一点,以下所有的"JavaScript"我都称为JS,貌似本来就可以这么称呼的...)与HTML结合使用,还可以使页面更好地用户交互的,从而使得静态页面上升到动态的页面。在HTML文件中嵌入script标签可以建立起HTML与JS之间的联系,但是,他们之间是以什么方式来进行沟通的呢?在书中说是通过DOM来代表我们的HTML页面,转而以DOM向JS互联沟通。
那DOM是如何出现的呢?为了熟悉这个看似高大上的名词,我们【书本和我还有感兴趣的你们】进行了一下探讨:

  1. 当你的浏览器加载一个HTML页面时,浏览器在解析HTML标签语句的同时,还会显示在浏览器的窗口中。但是更接近DOM的一方面,浏览器还会创建了一些列能够代表我们的HTML标签的对象,这些对象就存放在了DOM里面。
    html
    |
    -----------------------
    | |
    head body
    | |
    ----------- -----------------
    | | | | |
    title script h1 h2 p
    ...........

    1. 当页面加载完成后,相应地,浏览器也产生了一系列与页面标签对应的对象元素,这些对象元素存放在DOM(Document Object Model)中,于是,JS通过访问DOM中的对象元素就可以获取到该对象所代表的html标签,比如:
      HTML页面中有一个段落

      Hello! JS!

      假设现在上面的html已被浏览器加载完成,那么就存在一个与上面的

      标签对应的对象元素,这个元素属于DOM模型中的一员,JS可以通过访问这个对象来访问

      标签,从中,也可以得到段落

      里面的内容"Hello! JS!" JS如何获取到DOM中已存在的对象元素呢? 后面会继续提到。。

    2. JS通过DOM获取到了元素,便可以对元素本身所包含的信息进行查看,或者设置。更厉害的,JS让DOM创建元素,删除元素。怎么回事呢?简单说明一下:
    DOM创建元素:增加与新添元素对应的html标记到html页面中。
    DOM删除元素:删除掉html文件中对应的标签。
    
    如何做到的呢?
    后面就会提到了。。。
    

探讨结束!JS通过访问DOM中的元素来得到html文件中类似"p","h1",,

.等等之类的标签的访问。从中对标签进行查看以及修改。
于是,他们之间的沟通就是这样在进行着...

==============================

上面我总是说"JS通过DOM可以获取到什么什么",是否依然感到疑惑,DOM这个词倒是接触得多了,可具体什么含义呢?
"获取"又是如何做到的呢?

下面做一点个人理解补充:



  
    
    My blog
    
  

    

My blog

Great day bird watching

Today I saw three ducks! I named them Huey, Louie, and Dewey.

I took a couple of photos...

浏览器通过加载上面的html代码之后就会产生一个完整的页面了。

在JavaScript中有一个内置对象是 document。
这个内置对象document就相当于是浏览器所加载完成的页面,也相当于document对象拥有这个对象的DOM树(如果不理解DOM树可以参考个人画的DOM树图,也可以自行百度更多详细信息)。

JS访问到DOM中的节点是如何做到?
答:JS使用的内置对象document中的getElementById方法,参数是节点的id。如上HTML代码中的id 为 "entry1"的div标签,JS要想获取这个标签,可以这么做:

document.getElementById("entry1");
提示,document对象有一系列,很多的getElement方法可以获取到DOM树中的节点元素,对应HTML页面的各个标签。比如

  • 等等等等. JS获取到了页面文档的节点元素之后,我们可以通过JS代码来实现出许多有趣的功能。

【案例一】更改段落节点的内容

描述:我们有一个HTML文档,标签中仅有一个

标签,

标签里面的内容为"HelloWorld!"
我们的目的是将

标签的文本内容"HelloWorld!"替换为"HelloJs!"
怎么实现呢?


    
    Update the content of element
        
    
          
        

HelloWorld!

上面给出了HTML代码部分:用浏览器打开这个html文件,能看到的只是

标签带来的HelloWorld!

下面,我们使用JS代码来改变这个

标签的内容:

// window.onload = function () {};  这个的作用是等待页面加载完成了之后,执行该匿名函数

window.onload = function () {
    var ele = document.getElementById("target");  // 获取到DOM中id为target的元素,即对应页面文档中的

标签 ele.innerHTML = "HelloJs!" // OK! END~ };

上面的JS代码实现了修改

标签的内容这个小功能。
步骤:

  1. document对象获取了一个指向DOM中id = "target"元素(

    标签)的引用。并将这个引用赋值给变量ele.(意味着ele也可以操作这个id = target的元素)

  2. 使用元素的属性innerHTML对DOM中id = "target"的元素进行内容的更改,这一点点改动,会直接影响到浏览器中的页面,使得浏览器中的页面也发生了变动。即“HelloWorld!”变为"HelloJs!"

Q:当我使用document的getElementById方法时,传入了一个不存在的id,会出现什么结果?
A:我们知道,getElementById方法会找到DOM中id与该方法所得到的参数相同的元素,并返回。那如果这个ID本身是不存在的,那么,这个方法将返回null。

从这本书中,我知道了getElement系列方法的getELementsByClassName()的方法,这个方法将会返回一个集合。

Q:一个我比较模糊的概念,element object元素对象(DOM中)到底是什么?
A:这个问题也是最近一直困扰着我。

we're just assigning the function value to the window.onload property.

一个问题,我们写的JS代码是放在标签中的,而标签又是比标签还要快执行的,就是说在JS执行document.getELementByID("xxx")的时候,页面标签中的代码一句都未被执行,则页面并没有完全加载完成,也就是说DOM树结构也并未建立起来。DOM中不存在id = “xxx”的元素对象。
那怎么办呢?眼睁睁地看着浏览器报错吗?我明明在里面有id = "xxx"的那个标签呀!

莫着急,下面我们来解决问题,上面是说浏览器会先执行位于前面的对不对,那么,在执行head中的

你可能感兴趣的:(Head First JavaScript 之 DOM)