DOM节点和五个常见的DOM方法

一 什么的DOM

简单地说,DOM就是一套对文档内容进行抽象和概念化地方法。DOM的英文全名为(Document Object Model)

  • DOM中的 "D"
    document 即文档,它可将你编写的网页文档转换为一个文档对象。
  • DOM中的 "O"
    object 即对象,对象是一种自足的数据集合。与某个对象相关联的变量称为这个对象的属性,只能通过某个特定对象去调用的函数称为这个对象的方法。每个节点都是一个对象。
  • DOM中的 "M"
    model 即模型,节点树就是一种模型HTML中的各类标签的相互嵌套构成了模型。


    HTML DOM树

二 节点(node)

文档是由节点构成的集合,DOM节点可以包含其他类型的节点,具有嵌套关系而不是独立存在的。其中三种节点为:元素节点、文本节点和属性节点。

1)元素节点

元素节点是DOM的原子,即HTML的基本元素,如<body>、<p>和<ul>之类的元素。
没有被包含在其他元素里的唯一的元素是<html>元素,它是节点树的根元素。

2)文本节点

元素节点只是节点类型的一种,例如<p>元素中包含着文本"hello topview!",它就是一个文本节点。文节点总是被包含在元素节点的内部,但也有例外,如表格元素<ul>,只包含元素节点。

3)属性节点

属性节点用来对元素做出更具体的描述。因为属性总是被放在起始标签中,所以属性节点总是被包含在元素节点中。并非所有的元素都包含属性,但所有的属性都被元素包含。

三 获取元素

有三种DOM方法可以获取元素节点,分别是通过元素ID,通过标签名字和通过类名字来获取。

1)getElementById

这个方法将放回一个与那个有着给定id属性值的元素节点对应的对象。参数为标签的名字。

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="utf-8">
    <title>Shopping list</title>
</head>
<body>
  <ul id="purchases">
    <li>Atin of beans</li>
  </ul>
  <script>
    alert(typeof document.getElementById("purchases"));
  </script>
</body>
</html>

这个调用将会返回一个对象,在浏览器中加载这个文件,会弹出一个alert对话框,它向你们报告 document.getElementById("purchases")的类型,是一个对象。即对话框会显示 "object"。

2)getElementByTagName

getElementByTagName 方法返回一个对象数组,它的参数是标签的名字。
下面这个例子会返回一个列表项元素的个数 3。

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="utf-8">
<title>Shopping list</title>
</head>
<body>
  <ul id="purchases">
    <li>Atin of beans</li>
    <li>Atin of beans</li>
    <li>Atin of beans</li>
  </ul>
  <script>
    alert(document.getElementsByTagName("li").length);
  </script>
</body>
</html>

另外getElementByTagName允许把一个通配符作为它的参数。

通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。 当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。

可以通过下面的代码返回一份文档中元素节点的总数。

alert(document.getElementsByTagName("*").length);

3)getElementsByClassName

这个方法可以通过class属性中的类名来访问元素。与getElementsByTagName方法相似,getElementsByClassName也只接受一个参数,就是类名。

alert(document.getElementsByClassName("sale"));

使用这个方法还可以查找那些带有多个类名的元素,要指定多个类名,只要在字符串参数中使用空格分隔类名即可。例如:

alert(document.getElementsByClassName("important sale").length);

如果警告框显示1,则表示只有一个元素匹配,即只有一个元素同时带有两个类名。
注意类名的实际顺序和个数不重要,或者说没有限制。

四 获取和设置属性

上面讲的是三种获取特定元素的方法,下面说的是获取元素后对其属性进行获取和设置的方法。getAttribute方法可以用来获取属性,setAttribute方法可以用来更改属性节点的值。

1)getAttribute

getAttribute是一个函数,只有一个参数——你打算查询的属性的名字。

object.getAttribute(attribute);

与上面学的方法不同,getAttribute方法不属于document对象,所以不能通过document对象调用,它只能通过元素节点对象调用,例如下面的例子,可以与getElementByTagName方法合用,获取每个<p>元素的title属性。

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="utf-8">
    <title>Shopping list</title>
</head>
<body>
  <p title="a gentle reminder">Don't forget me!</p>
  <p>hello world!</p>
  <ul id="purchases">
    <li>Atin of beans</li>
    <li>Atin of beans</li>
    <li>Atin of beans</li>
  </ul>
  <script>
    var paras = document.getElementsByTagName("p");
      for (var i = 0; i < paras.length; i++) {
        var title_text = paras[i].getAttribute("title");
        if (title_text)  alert(title_text);
      }
  </script>
</body>
</html>

2)setAttribute

setAttribute()方法允许我们对某些节点的属性做出更改,和getAttribute一样,setAttribute只能用于元素节点。

object.setAttribute(attribute, value);

以下代码先从文档中获取全部带有title属性的<p>元素,然后把他们的title属性值都修改为zhong,原先的属性值会被覆盖。值得注意的是。文档源代码中title属性仍然是改变前的值,也就是说,setAttribute做出的修改不会反映到文档本身的源代码中。DOM的工作模式是先加载文档的静态内容,再动态刷新,动态刷新不影响文档的静态内容。也就是说,DOM可以对页面进行动态刷新却不需要在浏览器中刷新界面。

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="utf-8">
    <title>Shopping list</title>
</head>
<body>
  <p title="a gentle reminder">Don't forget me!</p>
  <p>hello world!</p>
  <ul id="purchases">
    <li>Atin of beans</li>
    <li>Atin of beans</li>
    <li>Atin of beans</li>
  </ul>
  <script>
    var paras = document.getElementsByTagName("p");
      for (var i = 0; i < paras.length; i++) {
        var title_text = paras[i].getAttribute("title");
        if (title_text)  {
            paras[i].setAttribute("title","zhong");
            alert(paras[i].getAttribute("title"));
        }
      }
  </script>
</body>
</html>

注意以下的写法是错误的:

var paras = document.getElementsByTagName("p");
  for (var i = 0; i < paras.length; i++) {
    var title_text = paras[i].setAttribute("title","zhong");
    if (title_text)  {
        //paras[i].setAttribute("title","zhong");
        alert(paras[i].getAttribute("title"));
    }
  }

setAttribute()只能单独使用,不能赋值给某个变量。

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

推荐阅读更多精彩内容

  •   DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。   DOM 描绘...
    霜天晓阅读 3,655评论 0 7
  • 本章内容 理解包含不同层次节点的 DOM 使用不同的节点类型 克服浏览器兼容性问题及各种陷阱 DOM 是针对 HT...
    闷油瓶小张阅读 644评论 0 1
  •   DOM 1 级主要定义的是 HTML 和 XML 文档的底层结构。   DOM2 和 DOM3 级则在这个结构...
    霜天晓阅读 1,452评论 1 3
  • Element 类型 除了 Document 类型之外,Element 类型就要算是 Web 编程中最常用的类型了...
    劼哥stone阅读 632评论 0 3
  • 计划 2015.4.30 继续想energy harvesting + packet arrival + batt...
    虾米小华阅读 642评论 1 2