js我爱编程

《JS-DOM 编程艺术》笔记 - 1(1 - 4)

2014-12-18  本文已影响0人  梦回吹角连营

1. 相关概念

DOM : Document Object Model,文档对象模型。简单的说 DOM 是一套对文档的内容进行抽象和概念化的方法。


2. JS 语法

var lennon = Array();
lennon["name"] = "John";
lennon["year"] = 1940;
lennon["living"] = false;
```

Object.property
Object.method()
```


3. DOM

DOM: Document Object Model 文档对象模型

当浏览器加载了一个网页后,DOM 根据网页文档创建了一文档对象。

对象是一种独立的数据集合,与对象相关联的变量称为对象的属性,通过对象调用的函数成为对象的方法。在 JS 中对象可以分为三种类型:

在宿主对象中,window 对象是最基础的对象,其对应着浏览器窗口本身,这个对象的属性和方法统称为 BOM (浏览器对象模型)。相对于 BOM, DOM 主要用来对网页的内容进行处理,而实现这一目标的载体就是 document 对象

DOM 代表着被加载到浏览器窗口里的当前网页。DOM 把一份文档表示为一棵树。

节点

文档是由节点构成的集合,此时的节点代表文档树上的树枝和树叶。有的 DOM 节点还包含其他类型的节点。

  1. 元素节点

    DOM 的原子即为 元素节点 (element node)。这些元素在文档中的布局形成了文档的结构。各种标签提供了元素的名字。元素可以包含其他元素 —— 唯一不会被其他元素包围的元素是 <html> 元素,它是整个节点的根元素

  2. 文本节点

    在 XHTML 中,文本节点总是被包含在元素节点的内部,但并非所有的元素节点都包含由文本节点。

  3. 属性节点

    属性是对元素的具体描述,属性总是被放在起始标签里,所以属性节点总是被包含在元素节点中。并非所有的元素都包含由属性,但所有的属性都被包含在元素中。

  4. CSS

    CSS 并不属于 DOM,CSS 是告诉浏览器应该如何显示一份文档的内容。类似 DOM,CSS 也把文档的内容视为一颗节点树。节点树上的各元素继承其父元素的样式属性。继承是 CSS 的一项强大的功能,如当为 body 元素定义了一些颜色或字体,包含在 body 元素里的所有元素都将自动获得 —— 也就是继承这些样式。

    为了把一个或几个元素与其他元素区别开来,经常需要使用 class 属性或 id 属性

    • class 属性

    所有的元素都由 class 属性,不同的元素可以有相同的 class 属性值。

    • id 属性

    id 属性的用途是给网页里的某个元素加上一个独一无二的标识符。每个元素只能由一个 id 属性值,不同的元素必须由不同的 id 属性值。id 属性用于连接文档中的某个元素和 CSS 样式表里的某个样式。

getElementById() 方法

这个方法将返回一个与给定 id 属性值的元素节点相对应的对象。这个方法是与 document 相关联的函数。使用时函数名后边必须根由一对圆括号,包含着函数的参数 —— 即所要获得的那个元素的 id 值,这个 id 值必须放在单引号或双引号中。

document.getElementById('idValue')

这个调用会返回对应 id 值的那个 document 对象。由于 id 值是独一无二的,所以返回的对象也是唯一的。

getElementsByTagName() 方法

getElementByTagName() 方法将返回一个对象数组,每个对象分别对应文档中有给定标签的一个元素。类似 getElementById(),这个方法也只有一个参数 —— 标签的名字。

document.getElementByTagName(tagValue)

与 getElementById() 十分类似,但是 getElementByTagName() 方法返回的是一个对象数组。

getElementByTagName() 方法还允许我们把一个通佩符当作它的参数,这样文档中的所有元素都会被返回。

getAttribute() 方法

当我们定位到特定元素节点后,可以使用 getAttribute() 方法把它的属性值查询出来。这个方法的参数也是一个 —— 需要查询的属性的名字。

object.Attribute(attribute)

getAttribute() 方法不能通过 document 对象调用,必须通过一个元素节点对象来调用。当需要查询的属性不存时则返回 null。

setAttribute() 方法

setAttribute() 方法用于对属性节点的值进行修改。类似于 getAttribute() 方法,必须通过元素节点对象调用的函数,但 setAttribute() 方法需要传递两个参数:

object.setAttribute(attribute, value)

即便要更改的属性并不存在,setAttribute() 也可以首先将属性创建出来,然后对值进行设置。如果属性存在,则直接将原有的值覆盖。

4. 案例研究: JS 美术馆

4.3 JS 函数的调用

4.4 对 JS 函数进行功能扩展

childNodes 将文档的节点树中任何一个元素的所有子元素检索出来,childNodes 属性将返回一个数组,这个数组包含给定元素节点的全体子元素:

element.childNodes

使用 childNodes 属性获取文档中的 body 元素的全体子元素:

var body_element = document.getElementsByTagName("body")[0];
body_element.childNodes;

在 JS DOM 中,body 元素还有一个更简单的专用记号:document.body

由 childNode 属性返回的数组包含所有类型的节点 —— 除了所有的元素节点,所有的属性节点和文本节点也包含在其中。文档树的节点类型并非只有元素节点一种,在文档中几乎所有的东西都是一个节点,连空格和换行符都会被解释为节点。这些也都会被包含在 childNode 属性返回的数组当中。

因此需要利用 nodeType 属性来区分文档中的各个节点。nodeType 属性返回一个数字来表示节点的类型,其中经常用到的由三种:

- 1:元素节点
- 2:属性节点
- 3:文本节点

使用 nodeType 的语法如下:

`node.nodeType`

firstChild 和 lastChild 分别代表 childNodes[ ] 数组的第一个和最后一个元素。

`node.firstChild`  <=> `node.childNodes[0]`

`node.lastChild`  <=> `node.childNodes[node.childNodes.lenth-1]`

nodeValue 属性可以检索和设置节点的值:

`node.nodeValue`

如果我们直接 nodeValue 属性检索一个 <p> 对象的值时,得到的并不是包含在这个元素中的文本,而是返回一个 null 值。包含在 <p> 元素里的文本是另一种节点,它在 DOM 里是 <p> 元素的第一个子节点。因此要想得到 <p> 元素的文本内容,就必须检索它的第一个子节点的 nodeValue 属性值。

nodeValue 属性不仅可以用来检索某个节点的值,还可以用它来设置某个节点的值。将需要更改的内容直接赋值给 nodeValue 属性即可改变元素的 nodeValue 属性

`element.firstChild.nodeValue` = text
上一篇 下一篇

猜你喜欢

热点阅读