JavaScript與DOM(上)

文檔對象模型Document Object Model

1. window對象作為全局對象,也就是說你可以通過window來訪問全局對象。
?屬性在對象下面以變量的形式存放,在頁面上創(chuàng)建的所有全局對象都會變成window對象的屬性。
方法在對象下面以函數(shù)的形式存放,因為左右的函數(shù)都存放在window對象下面,所以他們也可以稱為方法。
?Element節(jié)點在頁面里展示的是一個元素,所以如果你有段落元素(
),你可以通過這個DOM節(jié)點來訪問。
?Text節(jié)點在頁面里展示的所有文本相關(guān)的元素,所以如果你的段落有文本在里面的話,你可以直接通過DOM的Text節(jié)點來訪問這個文本
?Document節(jié)點代表是整個文檔,它是DOM的根節(jié)點。
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// 你也可以將布爾值賦給一個變量var veryTired = true;// 這樣使用if (veryTired) {// 執(zhí)行代碼}
Function
// 使用function操作符來聲明新函數(shù)function myFunctionName(arg1, arg2) {// 函數(shù)代碼}// 你也可以聲明匿名函數(shù)function (arg1, arg2) {// Function code goes here.}// 運行函數(shù)很簡單,直接在函數(shù)名稱后面加上小括號就可以了// 或者也可以帶上參數(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個項(apple)fruit[1]; // 訪問第2個項(lemon)fruit[2]; // 訪問第3個項(banana)
Object
// 2種類型定義Object對象// 字面量(大括號)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 ) { /* 代碼 */ }// 嚴格等于(推薦)2 === 2 // 代替 2 == 22 !== 3 // 代替 2 != 3// 賦值:var numberOfFruit = 9;numberOfFruit -= 2; // 等價于 "numberOfFruit = numberOfFruit - 2"numberOfFruit += 2; // 等價于 "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++; // 等價于counter += 1;}// FOR循環(huán)// i只是用于迭代,可以任意取名for (var i = 0, length = envatoTutSites.length; i < length; i++) {alert(envatoTutSites[i]);}
DOM正文
訪問DOM節(jié)點
<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é)點,這個DOM節(jié)點展示的是該信息段落
var allUnorderedLists = document.getElementsByTagName('ul');// 'getElementsByTagName'返回的是一個節(jié)點集合// - 和數(shù)組有點相似
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é)點的text內(nèi)容alert(allListItems[i].firstChild.data);}

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

的下一個節(jié)點也不是
- ,因為
和
- 之間有一個空行的節(jié)點,一般遇到這種情況需要遍歷所有的子節(jié)點然后判斷nodeType類型,1是元素,2是屬性,3是text節(jié)點,詳細的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é)

