什麼是DOM (Document Object Model)

通过 JavaScript,您可以重構整个 HTML 文档。您可以添加、移除、改变或重排页 面上的项目。要改变页面的某个东西,JavaScript 就需要对 HTML 文档中所有元素进行访问的入口。 这个入口,连同对 HTML 元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获 得的(DOM)。

在 1998 年,W3C 发布了第一级的 DOM 规範。这个规範允许访问和操作 HTML 页面中的每一个单独的元素。

所有的浏览器都执行了这个标准,因此,DOM 的相容性问题也幾乎难觅踪影了。

DOM 可被 JavaScript 用来读取、改变 HTML、XHTML 以及 XML 文 档。


DOM 被分为不同的部分(核心、XML及HTML)和级别(DOM Level 1/2/3):



Core DOM 定义了一套标准的针对任何结構化文档的对象
XML DOM 定义了一套标准的针对 XML 文档的对象
HTML DOM 定义了一套标准的针对 HTML 文档的对象。
HTML 文档中的每个成分都是一个节点。

节点


根據 DOM,HTML 文档中的每个成分都是一个节点。


DOM 是这样规定的:

  • 整个文档是一个文档节点
  • 每个 HTML 标签是一个元素节点
  • 包含在 HTML 元素中的文本是文本节点
  • 每一个 HTML 属性是一个属性节点
  • 注释属於注释节点

Node 层次


节点彼此都有等级关系。


HTML 文档中的所有节点组成了一个文档树(或节点树)。HTML 文档中的每个元素、 属性、文本等都代表着树中的一个节点。树起始于文档节点,並由此继续伸出枝条,直到处於这棵树
最低级别的所有文本节点为止。


下麵这个图片表示一个文档树(节点树):


HTML树结構HTML树结構


一棵节点树中的所有节点彼此都是有关系的。


文档树(节点数)


请看下麵这个HTML文档:




DOM Tutorial


DOM Lesson one


Hello world!




上面所有的节点彼此间都存在关系


除文档节点之外的每个节点都有父节点。举例, 和 的父节点是 节点,文本节点 "Hello
world!" 的父节点是

节点。


大部分元素节点都有子节点。比方说, 节点有一个子节点 : 节点。<title> 节点也有一个子节点:文本节点<br />"DOM Tutorial"。</p><br /><p>当节点分享同一个父节点时,它们就是<em>同辈(同级节点)</em>。比方说,<h1> 和 <p>是同辈,因为它们的父节点均是 <body> 节点。</p><br /><p>节点也可以拥有<em>後代</em>,後代指某个节点的所有子节点,或者这些子节点的子 节点,以此类推。比方说,所有的文本节点都是 <html>节点的後代,而第一个文本节点是<br /><head> 节点的後代。</p><br /><p>节点也可以拥有<em>先辈</em>。先辈是某个节点的父节点,或者父节点的父节点,以此 类推。比方说,所有的文本节点都可把 <html> 节点作为先辈节点。</p><br /><p><strong><span style="font-size:180%;color:#ff0000;">下麵 来看幾个简单的例子 我想一下子就明白了!</span></strong></p><br /><strong>通过 DOM,您可访问 HTML 文档中的每个节点。</strong><br /><br /><br /><h2>查找並访问节点</h2><p>你可通过若干種方法来查找您希望操作的元素:</p><ul><li>通过使用 getElementById() 和 getElementsByTagName() 方法 </li><li>通过使用一个元素节点的 parentNode、firstChild 以及 lastChild 属性 </li></ul><p><span style="color:#800000;">getElementById() 和 getElementsByTagName()</span></p><p>getElementById() 和 getElementsByTagName() 这两種方法,可查找整个 HTML 文档中的任何 HTML 元素。</p><p>这两種方法会忽略文档的结構。假如您希望查找文档中所有的 <p> 元素,getElementsByTagName() 会把它们全部找到,不管 <p><br />元素处于文档中的哪个层次。同时,getElementById() 方法也会返回正確的元素,不论它被隐藏在文档结構中的什麼位置。</p><p>这两種方法会像您提供任何你所需要的 HTML 元素,不论它们在文档中所处的位置!</p><p>getElementById() 可通过指定的 ID 来返回元素:</p><br /><h3><span style="font-size:130%;color:#800080;">getElementById() 语法</span></h3><pre>document.getElementById("ID");</pre><pre>注释:getElementById() 无法工作在 XML 中。在 XML 文档中,您必须通过拥有类型 id 的属性来进行搜索,而此类型必须在<br />XML DTD 中进行声明。</pre><br /><p>getElementsByTagName() 方法会使用指定的标签名返回所有的元素(作 为一个节点列表),这些元素是您在使用此方法时所处的元素的後代。</p><br /><p>getElementsByTagName() 可被用於任何的 HTML 元素:</p><br /><h3><span style="font-size:130%;color:#800080;">getElementsByTagName() 语法</span></h3><pre>document.getElementsByTagName("标签名称");</pre><pre>或者:</pre><pre>document.getElementById('ID').getElementsByTagName("标签名称");</pre><br /><h3>實例1</h3><p>下麵这个例子会返回文档中所有 <p> 元素的一个节点列表:</p><p>document.getElementsByTagName("p");</p><h3>實例2</h3><p>下麵这个例子会返回所有 <p> 元素的一个节点列表,且这些 <p> 元素必须是 id 为 "maindiv" 的元素的後代:</p><p>document.getElementById('maindiv').getElementsByTagName("p");</p><br /><h3>节点列表(nodeList)</h3><p>当我们使用节点列表时,通常要把此列表保存在一个变量中,就像这样:</p><pre>var x=document.getElementsByTagName("p");</pre><p>现在,变量 x 包含着页面中所有 <p> 元素的一个列表,並且我们可以通过它们的索引 号来访问这些 <p> 元素。</p><p class="note">注释:索引号从 0 开始。</p><p>您可以通过使用 length 属性来循环遍历节点列表:</p><pre>var x=document.getElementsByTagName("p");<br />for (var i=0;i<x.length;i++)<br /> {<br /> // do something with each paragraph<br /> }</pre><p>您也可以通过索引号来访问某个具體的元素。</p><p>要访问第三个 <p> 元素,您可以这麼写:</p><pre>var y=x[2];</pre><br /><h2><span style="color:#800080;">parentNode、firstChild以及lastChild</span></h2><p>这三个属性 parentNode、firstChild 以及 lastChild 可遵循文档的结構,在文档中进行“短距離的旅行”。</p><p>请看下麵这个 HTML 片段:</p><br /><pre><table><br /> <tr><br /> <td>John</td><br /> <td>Doe</td><br /> <td>Alaska</td><br /> </tr><br /></table></pre><br /><p>在上面的HTML代码中,第一个 <td> 是 <tr> 元素的首个子元素(firstChild),而最後一 个 <td> 是 <tr>元素的最後一个子元素(lastChild)。</p><p>此外,<tr> 是每个 <td>元 素的父节点(parentNode)。</p><p>对 firstChild 最普遍的用法是访问某个元素的文本:</p><pre>var x=[a paragraph];<br />var text=x.firstChild.nodeValue;</pre><pre>parentNode 属性常被用来改变文档的结構。假设您希望从文档中删除带有 id 为 "maindiv" 的节点:</pre><pre>var x=document.getElementById("maindiv");<br />x.parentNode.removeChild(x);</pre><p>首先,您需要找到带有指定 id 的节点,然後移至其父节点並执行 removeChild() 方法。</p><br />Link from : <a target="_blank" rel="noopener" href="http://hi.baidu.com/haomao/blog/item/4b8639c753bb3ad8d10060b0.html">http://hi.baidu.com/haomao/blog/item/4b8639c753bb3ad8d10060b0.html</a><div class="blogger-post-footer">Copyright © Bruce Huang All rights reserved.</div> <p class="article-more-link"> <a href="/2009/02/%E4%BB%80%E9%BA%BC%E6%98%AFDOM-Document-Object-Model/#more">Read More</a> </p> </div> <footer class="article-footer"> <a data-url="https://blog.xispace.app/2009/02/%E4%BB%80%E9%BA%BC%E6%98%AFDOM-Document-Object-Model/" data-id="clt2m4ta50086iw0m5gjl2ihw" class="article-share-link">Share</a> <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/HTML/" rel="tag">HTML</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/javascript/" rel="tag">javascript</a></li></ul> </footer> </div> </article> <article id="post-Flexigrid-for-jQuery" class="article article-type-post" itemscope itemprop="blogPost"> <div class="article-meta"> <a href="/2009/02/Flexigrid-for-jQuery/" class="article-date"> <time datetime="2009-02-10T07:29:00.000Z" itemprop="datePublished">2009-02-10</time> </a> </div> <div class="article-inner"> <header class="article-header"> <h1 itemprop="name"> <a class="article-title" href="/2009/02/Flexigrid-for-jQuery/">Flexigrid for jQuery</a> </h1> </header> <div class="article-entry" itemprop="articleBody"> 來玩玩表格插件 Flexigrid<br />引自 : <a target="_blank" rel="noopener" href="http://www.robysky.com/archives/197">http://www.robysky.com/archives/197</a><div class="blogger-post-footer">Copyright © Bruce Huang All rights reserved.</div> <p class="article-more-link"> <a href="/2009/02/Flexigrid-for-jQuery/#more">Read More</a> </p> </div> <footer class="article-footer"> <a data-url="https://blog.xispace.app/2009/02/Flexigrid-for-jQuery/" data-id="clt2m4t7l001hiw0m06svgb6m" class="article-share-link">Share</a> <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/jQuery/" rel="tag">jQuery</a></li></ul> </footer> </div> </article> <article id="post-jquery-SerialScroll-plugin-滚动图片" class="article article-type-post" itemscope itemprop="blogPost"> <div class="article-meta"> <a href="/2009/02/jquery-SerialScroll-plugin-%E6%BB%9A%E5%8A%A8%E5%9B%BE%E7%89%87/" class="article-date"> <time datetime="2009-02-10T06:54:00.000Z" itemprop="datePublished">2009-02-10</time> </a> </div> <div class="article-inner"> <header class="article-header"> <h1 itemprop="name"> <a class="article-title" href="/2009/02/jquery-SerialScroll-plugin-%E6%BB%9A%E5%8A%A8%E5%9B%BE%E7%89%87/">jquery.SerialScroll plugin 滚动图片</a> </h1> </header> <div class="article-entry" itemprop="articleBody"> Demo : <a target="_blank" rel="noopener" href="http://demos.flesler.com/jquery/serialScroll/">http://demos.flesler.com/jquery/serialScroll/</a><br /><br />Example code here :<br /><br /><div class="postbody"><p><%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ScrollJquery._Default" %> <p><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a target="_blank" rel="noopener" href="http://www.blogger.com/">http://www.blogger.com/</a>><br /><html xmlns="<a target="_blank" rel="noopener" href="http://www.blogger.com/">http://www.blogger.com/</a>><br /><head runat="server"><br /><title>Jquery Scroll








Read More

ScrollTo Plugin 页面滚动插件

很多时候特别在页面比较长的时候我们都会加上一个如"go Top!","go Bottom"等之类的按钮或连接,用于快捷的引导用户到页面指定的位置。我们一般都使用html的瞄标记来实现,但这样给用户的体验不是很好,特别页面较长时页面瞬间滚动到页面的底部或顶部可能会使用户迷失,jQuery ScrollTo Plugin这个组件正好帮我们解决这个问题。 jQuery ScrollTo Plugin采用一种平滑的滚动方式,给用户一种友好的交互体验。很有实用的价值的一个组件。

演示:http://tobielangel.com/examples/auto-scrolling-page-navigation

Read More

jQuery.LocalScroll 滾動至錨點

jQuery.LocalScroll description

jQuery.LocalScroll is a jQuery plugin that will animate a regular anchor navigation.

It will allow your visitors to navigate your site with a smooth scrolling effect.

Each time a link is clicked, the element you decide(can be the whole screen), will gradually scroll to the targeted element, instead of "jumping" as it'd normally do. jQuery.ScrollTo is used for the animation.

The plugin supports dynamically added/loaded anchors and local links.

Demos :
http://demos.flesler.com/jquery/localScroll/
http://tobielangel.com/examples/auto-scrolling-page-navigation

Read More

MS Support JQuery dialog tool

TIPS-為VS2008加入完整jQuery Intellisense

微軟不是說jQuery已正式納入為ASP.NET產品的一部分? Visual Studio 2008應該對jQuery提供更多支援才對呀? 有嗎?

日前,MS Visual Studio Web Tools的Program Manager, Jeff King, 在他的Blog提供了讓VS2008加入完整jQuery Intellisense的做法

首先,jQuery的官方下載區(http://docs.jquery.com/Downloading_jQuery#Download_jQuery),在原本的Minified, Packed, Uncompressed版檔案連結下方,多了一個Documentation項目,裡面有Visual Studio的專用文件說明檔: jquery-1.2.x-vsdoc.js。

這個檔案怎麼用呢? 依照Jeff King的說法,要寫成以下的格式: (js中則是要加入/// 宣告)

< type="text/javascript" src="js/jquery-1.2.6.js">
< % if (false) { % >
< type="text/javascript" src="js/jquery-1.2.6-vsdoc.js">
< % } %>

if (false) 的寫法有點Tricky,它可以讓Visual Studio讀入vsdoc.js的內容,在Intellisense時顯示完整的函數、參數說明,卻又不干擾實際的執行。
加入後,在VisualStudio 2008裡要動用 jQuery 相關函數時,就可以看到完整的文字敘述,感覺還不錯。



不過,要另外手動加上vsdoc.js的Script Include顯得有些笨,更不用說那個if (false)的怪招,感覺是硬拼出來的解決方案。
所幸,這只是暫時的因應之計,未來將會有Hotfix讓Visual Studio能自動尋找vsdoc.js,屆時就可以稱得上是內建支援了。

【2008-11-08更新】Wow! 自動搜尋-vsdoc.js的Hotfix已經出來囉! 可以下載玩玩!

引用自 :
http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/11/09/jquery-intellisense.aspx
http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/10/01/ms-support-jquery.aspx

Read More