JavaScript與DOM(上)

文檔對(duì)象模型Document Object Model

1. window對(duì)象作為全局對(duì)象,也就是說你可以通過window來訪問全局對(duì)象。
?屬性在對(duì)象下面以變量的形式存放,在頁面上創(chuàng)建的所有全局對(duì)象都會(huì)變成window對(duì)象的屬性。
方法在對(duì)象下面以函數(shù)的形式存放,因?yàn)樽笥业暮瘮?shù)都存放在window對(duì)象下面,所以他們也可以稱為方法。
?Element節(jié)點(diǎn)在頁面里展示的是一個(gè)元素,所以如果你有段落元素(
),你可以通過這個(gè)DOM節(jié)點(diǎn)來訪問。
?Text節(jié)點(diǎn)在頁面里展示的所有文本相關(guān)的元素,所以如果你的段落有文本在里面的話,你可以直接通過DOM的Text節(jié)點(diǎn)來訪問這個(gè)文本
?Document節(jié)點(diǎn)代表是整個(gè)文檔,它是DOM的根節(jié)點(diǎn)。
Web上的JavaScript
Script元素
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>JavaScript!title>head><body><script type="text/javascript">//// ]]>script>body>html>
Defer屬性
連接外部腳本
<script type="text/javascript" src="my-script.js">script>
JavaScript必備
Number
// 注:使用var類聲明變量var leftSide = 100;var topSide = 50;var areaOfRectangle = leftSide * topSide; // = 5000
String
var firstPart = 'Hello';var secondPart = 'World!';var allOfIt = firstPart + ' ' + secondPart; // Hello World!// +符合是字符連接符。也用于數(shù)字相加
Boolean
5 === (3 + 2); // = true// 你也可以將布爾值賦給一個(gè)變量var veryTired = true;// 這樣使用if (veryTired) {// 執(zhí)行代碼}
Function
// 使用function操作符來聲明新函數(shù)function myFunctionName(arg1, arg2) {// 函數(shù)代碼}// 你也可以聲明匿名函數(shù)function (arg1, arg2) {// Function code goes here.}// 運(yùn)行函數(shù)很簡(jiǎn)單,直接在函數(shù)名稱后面加上小括號(hào)就可以了// 或者也可以帶上參數(shù)myFunctionName(); // 無參myFunctionName('foo', 'bar'); // 有參數(shù)// 也可以使用自調(diào)用(function () {// 這里自調(diào)用函數(shù)})();
Array
// 2種方式聲明數(shù)組// 字面量:var fruit = ['apple', 'lemon', 'banana'];// Array構(gòu)造函數(shù):var fruit = new Array('apple', 'lemon', 'banana');fruit[0]; // 訪問第1個(gè)項(xiàng)(apple)fruit[1]; // 訪問第2個(gè)項(xiàng)(lemon)fruit[2]; // 訪問第3個(gè)項(xiàng)(banana)
Object
// 2種類型定義Object對(duì)象// 字面量(大括號(hào))var profile = {name: 'Bob',age: 99,job: 'Freelance Hitman'};// 使用Object構(gòu)造函數(shù)var profile = new Object();profile.name = 'Bob';profile.age = 99;profile.job = 'Freelance Hitman';
IF/Else語句
var legalDrinkingAge = 21;var yourAge = 29;if ( yourAge >= legalDrinkingAge ) {alert('You can drink.');} else {alert('Sorry, you cannot drink.');
JavaScript操作符
// 加減乘除var someMaths = 2 + 3 + 4 - 10 * 100 / 2;// 等于if ( 2 == (5 - 3 ) { /* 代碼 */ } // == 比較是否相等// 不等于if ( 2 != (5 - 3 ) { /* 代碼 */ }// 嚴(yán)格等于(推薦)2 === 2 // 代替 2 == 22 !== 3 // 代替 2 != 3// 賦值:var numberOfFruit = 9;numberOfFruit -= 2; // 等價(jià)于 "numberOfFruit = numberOfFruit - 2"numberOfFruit += 2; // 等價(jià)于 "numberOfFruit = numberOfFruit + 2"
Loop循環(huán)
var envatoTutSites = ['NETTUTS', 'PSDTUTS', 'AUDIOTUTS', 'AETUTS', 'VECTORTUTS'];// WHILE循環(huán)var counter = 0;var lengthOfArray = envatoTutSites.length;while (counter < lengthOfArray) {alert(envatoTutSites[counter]);counter++; // 等價(jià)于counter += 1;}// FOR循環(huán)// i只是用于迭代,可以任意取名for (var i = 0, length = envatoTutSites.length; i < length; i++) {alert(envatoTutSites[i]);}
DOM正文
訪問DOM節(jié)點(diǎn)
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>JavaScript!title>head><body><p id="intro">My first paragraph...p><ul><li>List item 1li><li>List item 1li><li>List item 1li><li>List item 1li><li>List item 1li>ul><script type="text/javascript">//// ]]>script>body>html>
var introParagraph = document.getElementById('intro');// 現(xiàn)在有了該DOM節(jié)點(diǎn),這個(gè)DOM節(jié)點(diǎn)展示的是該信息段落
var allUnorderedLists = document.getElementsByTagName('ul');// 'getElementsByTagName'返回的是一個(gè)節(jié)點(diǎn)集合// - 和數(shù)組有點(diǎn)相似
getElementsByTagName
// 訪問無序列表: [0]索引var unorderedList = document.getElementsByTagName('ul')[0];// 獲取所有的li集合:var allListItems = unorderedList.getElementsByTagName('li');// 循環(huán)遍歷for (var i = 0, length = allListItems.length; i < length; i++) {// 彈出該節(jié)點(diǎn)的text內(nèi)容alert(allListItems[i].firstChild.data);}

DOM穿梭
Node.childNodes: 訪問一個(gè)單元素下所有的直接子節(jié)點(diǎn)元素,可以是一個(gè)可循環(huán)的類數(shù)組對(duì)象。該節(jié)點(diǎn)集合可以保護(hù)不同的類型的子節(jié)點(diǎn)(比如text節(jié)點(diǎn)或其他元素節(jié)點(diǎn))。
Node.firstChild: 與‘childNodes’數(shù)組的第一個(gè)項(xiàng)(‘Element.childNodes[0]‘)是同樣的效果,僅僅是快捷方式。
Node.lastChild: 與‘childNodes’數(shù)組的最后一個(gè)項(xiàng)(‘Element.childNodes[Element.childNodes.length-1]‘)是同樣的效果,僅僅是快捷方式。shortcut.
Node.parentNode: 訪問當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn),父節(jié)點(diǎn)只能有一個(gè),祖節(jié)點(diǎn)可以用‘Node.parentNode.parentNode’的形式來訪問。
Node.nextSibling: 訪問DOM樹上與當(dāng)前節(jié)點(diǎn)同級(jí)別的下一個(gè)節(jié)點(diǎn)。
Node.previousSibling: 訪問DOM樹上與當(dāng)前節(jié)點(diǎn)同級(jí)別的上一個(gè)節(jié)點(diǎn)。

的下一個(gè)節(jié)點(diǎn)也不是
- ,因?yàn)?p>和
- 之間有一個(gè)空行的節(jié)點(diǎn),一般遇到這種情況需要遍歷所有的子節(jié)點(diǎn)然后判斷nodeType類型,1是元素,2是屬性,3是text節(jié)點(diǎn),詳細(xì)的type類型可以通過此地址:
Node.ELEMENT_NODE == 1Node.ATTRIBUTE_NODE == 2Node.TEXT_NODE == 3Node.CDATA_SECTION_NODE == 4Node.ENTITY_REFERENCE_NODE == 5Node.ENTITY_NODE == 6Node.PROCESSING_INSTRUCTION_NODE == 7Node.COMMENT_NODE == 8Node.DOCUMENT_NODE == 9Node.DOCUMENT_TYPE_NODE == 10Node.DOCUMENT_FRAGMENT_NODE == 11Node.NOTATION_NODE == 12
總結(jié)

