奉獻(xiàn)net就業(yè)教程之4基礎(chǔ)加強(qiáng)4動(dòng)態(tài)創(chuàng)建元素操作javascriptdom_第1頁(yè)
奉獻(xiàn)net就業(yè)教程之4基礎(chǔ)加強(qiáng)4動(dòng)態(tài)創(chuàng)建元素操作javascriptdom_第2頁(yè)
奉獻(xiàn)net就業(yè)教程之4基礎(chǔ)加強(qiáng)4動(dòng)態(tài)創(chuàng)建元素操作javascriptdom_第3頁(yè)
奉獻(xiàn)net就業(yè)教程之4基礎(chǔ)加強(qiáng)4動(dòng)態(tài)創(chuàng)建元素操作javascriptdom_第4頁(yè)
奉獻(xiàn)net就業(yè)教程之4基礎(chǔ)加強(qiáng)4動(dòng)態(tài)創(chuàng)建元素操作javascriptdom_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

北京傳智播客教育JavaScript

DOM編程講師:趙老師課程說(shuō)明內(nèi)容:使用JavaScript操作DOM進(jìn)行DHtml開(kāi)發(fā)。目標(biāo):能夠使用JavaScript操作DOM實(shí)現(xiàn)常見(jiàn)的DHtml效果。參考書(shū):張孝祥《JavaScript網(wǎng)頁(yè)開(kāi)發(fā)——體驗(yàn)式學(xué)習(xí)教程》為什么要學(xué)習(xí)JavaScript操作DOMJavaScript最終是要操作Html頁(yè)面,讓Html變成DHtml,而操作

Html頁(yè)面就要用到DOM。DOM就是把Html頁(yè)面模擬成一個(gè)對(duì)象,就像XDocument一樣,把Xml模擬成了一個(gè)對(duì)象,提供了操作各個(gè)節(jié)點(diǎn)的方法,直接調(diào)用就可以了。如果JavaScript只是執(zhí)行一些計(jì)算、循環(huán)等操作,而不能操作Html也就失去了它存在的意義。xmlDOM入門(mén)(把標(biāo)簽當(dāng)做對(duì)象來(lái)處理)DOM就是Html頁(yè)面的模型,將每個(gè)標(biāo)簽都做為一個(gè)對(duì)象,JavaScript通過(guò)調(diào)用DOM中的屬性、方法就可以對(duì)網(wǎng)頁(yè)中的文本框、層等元素進(jìn)行編程控制。比如通過(guò)操作文本框的DOM對(duì)象,就可以讀取文本框中的值、設(shè)置文本框中的值。JavaScript→DOM就是C#→.Net

Framwork。沒(méi)有.net,C#只能for、while,連WriteLine、MessageBox都不行。DOM就是一些讓JavaScript能操作Html頁(yè)面控件的類(lèi)、函數(shù)。DOM也像WinForm一樣,通過(guò)事件、屬性、方法進(jìn)行編程。CSS+JavaScript+DOM=DHtml學(xué)習(xí)階段只考慮IE。用IECollection安裝IE所有版本,學(xué)習(xí)使用IE6(要調(diào)試必須使用本機(jī)安裝的版本)。//jsDOM在不同的瀏覽器下支持不一樣。(IETester)DOM模型根據(jù)Id獲取頁(yè)面元素window.id(不要使用)document.getElementById('id')//推薦使用事件在DOM中有很多事件。演示:<body

onmousedown=“alert(‘別點(diǎn)我!’);”>//注意body的范圍。有時(shí)事件的響應(yīng)代碼比較多,就要放到一個(gè)函數(shù)中:

<script

type="text/javascript">

function

UserMouseDown()

{

alert('網(wǎng)頁(yè)被你點(diǎn)壞了>_<~~,賠吧!');

alert('逗你玩呢~~');

}

</script>

<input

type="button"

value="按鈕"onmousedown="UserMouseDown();"/>onmousedown=“UserMouseDown();”中,UserMouseDown后的括號(hào)不能丟(不能寫(xiě)成onmousedown=“UserMouseDown”),帶()表示調(diào)用函數(shù),直接寫(xiě)函數(shù)名表示設(shè)置事件的處理函數(shù)為UserMouseDown。動(dòng)態(tài)設(shè)置事件JavaScript也可以像.Net中那樣動(dòng)態(tài)設(shè)置事件,Button.Click+=…

<script

type="text/javascript">alert('In

F1');

}alert('In

F2');

}

function

F1()

{

function

F2()

{

</script>

<input

type="button"

value="關(guān)聯(lián)F1"onclick="document.onclick=F1;"/>

<input

type="button"

value="關(guān)聯(lián)F2"onclick="document.onclick=F2;"/>注意:onclick=“document.onclick=F1;”

此處的F1不要加括號(hào),加括號(hào)就編程了調(diào)用F1()函數(shù),并且把返回值賦值給

document.onclick了。可以通過(guò)winform的事件來(lái)演示onclick=“hanshu()”與onclick=hanshu;的區(qū)別。如果講解,見(jiàn)備注1.window對(duì)象(Dom中的一個(gè)頂級(jí)對(duì)象。)window對(duì)象代表當(dāng)前瀏覽器窗口。使用window對(duì)象的屬性、方法的時(shí)候可以省略window。比如:

window.alert(‘hello');可以省略成alert(‘hello');

window.document可以直接寫(xiě)document能不寫(xiě)window就不要寫(xiě),這樣可以減少js文件的字節(jié)數(shù)。window對(duì)象的方法1window.alert(‘大家好!’);//彈出警告對(duì)話框window.confirm(‘確定要?jiǎng)h除嗎?’);//確定、取消對(duì)話框,返回

true或false;window.navigate(url);//將網(wǎng)頁(yè)重新導(dǎo)航到url,只支持IE、Opera11.6,建議使用window.location.href=‘url’;//支持大多數(shù)瀏覽器window對(duì)象的方法2window.setInterval(code,delay)//每隔一段時(shí)間執(zhí)行指定的代碼(類(lèi)似于winForm中的Timer控件。)

第一個(gè)參數(shù):指定的代碼字符串

第二個(gè)參數(shù):時(shí)間間隔(毫秒數(shù))

var

intervalId=setInterval(“alert(‘hello’);”,1000);window.clearInterval(intervalId);//停止計(jì)時(shí)器

clearInterval()取消setInterval的定時(shí)執(zhí)行,相當(dāng)于Timer中的

Enabled=False。因?yàn)閟etInterval可以設(shè)定多個(gè)定時(shí),所以

clearInterval要指定清除那個(gè)定時(shí)器的標(biāo)識(shí),即setInterval的返回值。

案例:文本框自增。

進(jìn)度條案例:見(jiàn)備注1.window對(duì)象的方法3setTimeout也是定時(shí)執(zhí)行,但是不像setInterval那樣是重復(fù)的定時(shí)執(zhí)行,只執(zhí)行一次,clearTimeout也是清除定時(shí)。很好區(qū)分:Interval:間隔;timeout:超時(shí)。var

timeoutId

=

setTimeout("alert('hello')",

2000);案例:實(shí)現(xiàn)標(biāo)題欄走馬燈的效果,也就是瀏覽器的標(biāo)題文字每隔500ms向右滾動(dòng)一下。提示:標(biāo)題為document.title屬性。實(shí)現(xiàn)代碼參考備注。練習(xí):剛進(jìn)入的時(shí)候還是向左滾動(dòng),點(diǎn)擊【向左】按鈕就向左連續(xù)滾動(dòng),點(diǎn)擊【向右】按鈕就向右連續(xù)滾動(dòng)。

思路1、”全局變量”,標(biāo)志當(dāng)前的滾動(dòng)方向,當(dāng)點(diǎn)擊向左的時(shí)候dir="left",向右dir="right"。

思路2、scrollleft

scroolright,向右滾的時(shí)候?qū)crollleft的Intervalclear掉,然后setInterval啟動(dòng)scrollright延遲操作。見(jiàn)備注1.body、document對(duì)象的事件onload(頁(yè)面加載后觸發(fā))

網(wǎng)頁(yè)加載完畢時(shí)觸發(fā),瀏覽器是一邊下載文檔、一邊解析執(zhí)行,可能會(huì)出現(xiàn)JavaScript執(zhí)行時(shí)需要操作某個(gè)元素,這個(gè)元素還沒(méi)有加載,如果這樣就要把操作的代碼放到body的onload事件中,或者可以把JavaScript放到元素之后。元素的onload事件是元素自己加載完畢時(shí)觸發(fā),body

onload才是全部加載完成。

window.控件Id(不建議使用)

document.getElementById(“控件Id”);(推薦)onunload(頁(yè)面卸載后觸發(fā))

網(wǎng)頁(yè)關(guān)閉(或者離開(kāi))后觸發(fā)。//刷新頁(yè)面的時(shí)候、關(guān)閉選項(xiàng)卡的時(shí)候(多個(gè)選項(xiàng)卡)onbeforeunload(頁(yè)面卸載前觸發(fā))

在網(wǎng)頁(yè)準(zhǔn)備關(guān)閉(或者離開(kāi))前觸發(fā)。//注意瀏覽器緩存

<bodyonbeforeunload=“return‘真的要放棄發(fā)帖退出嗎?’;”>。顯示的文字隨瀏覽器版本而有差異。//=“window.event.returnValue=‘’只兼容IE其他事件除了屬性之外,當(dāng)然還有通用的HTML元素的事件:onclick(單擊)、ondblclick(雙擊)、onkeydown(按鍵按下)、onkeypress(點(diǎn)擊按鍵)、onkeyup(按鍵釋放)、onmousedown(鼠標(biāo)按下)、onmousemove(鼠標(biāo)移動(dòng))、onmouseout(鼠標(biāo)離開(kāi)元素范圍)、onmouseover(鼠標(biāo)移動(dòng)到元素范圍)、onmouseup(鼠標(biāo)按鍵釋放)、oncontextmenu(在瀏覽器中單擊鼠標(biāo)右鍵顯示”右鍵菜單”時(shí)觸發(fā))等。window對(duì)象的屬性1window.location對(duì)象:

window.location.href=‘’;//重新導(dǎo)航到新頁(yè)面,可以取值,也可以賦值。

window.location.reload();//刷新當(dāng)前頁(yè)window.event是IE下非常重要的屬性,用來(lái)獲得發(fā)生事件時(shí)的信息,事件不局限于window對(duì)象的事件,所有元素的事件都可以通過(guò)event屬性取到相關(guān)信息。類(lèi)似于winForm中的e(EventArgs)。//兼容IE、Chrome,不兼容FF(用event參數(shù))。

window.event.altKey屬性,bool類(lèi)型,表示事件發(fā)生時(shí)是否按下了alt鍵。類(lèi)似的還有ctrlKey,shiftKey。演示:<inputtype="button"

value="點(diǎn)擊"onclick="if(event.altKey){alert('Alt點(diǎn)擊

')}else{alert('普通點(diǎn)擊')}"/>;window對(duì)象的屬性2window.event的屬性(接上頁(yè)):

clientX、clientY

發(fā)生事件時(shí)鼠標(biāo)在客戶區(qū)的坐標(biāo);screenX、

screenY

發(fā)生事件時(shí)鼠標(biāo)在屏幕上的坐標(biāo);offsetX、offsetY

發(fā)生事件時(shí)鼠標(biāo)相對(duì)于事件源(比如點(diǎn)擊按鈕時(shí)觸發(fā)onclick)的坐標(biāo)。當(dāng)頁(yè)面中有<!DOCTYPE(文檔定義)時(shí),對(duì)offsetX和offsetY單擊時(shí)的解析不同(使用onmousedown的時(shí)候與onclick測(cè)試結(jié)果不同。)。(單擊按鈕中文字的時(shí)候。)

(window.event.returnValue)returnValue屬性,如果將returnValue設(shè)置為false,就會(huì)取消默認(rèn)事件的處理。在超鏈接的onclick里面禁止訪問(wèn)href的頁(yè)面。在表單校驗(yàn)的時(shí)候禁止提交表單到服務(wù)器,防止錯(cuò)誤數(shù)據(jù)提交給服務(wù)器、防止頁(yè)面刷新。

(onsubmit="window.event.returnValue=false;")

window.event.returnValue不兼容火狐瀏覽器

FireFox:e.

preventDefault();取消事件的默認(rèn)動(dòng)作。

直接寫(xiě)return

false;IE、FF、Chrome都可以。window對(duì)象的屬性3window.event的屬性(接上頁(yè)):

srcElement:獲得事件源對(duì)象。幾個(gè)按鈕共享一個(gè)事件響應(yīng)函數(shù)用。****_click(object

sender,EventArgs

e)//IE、Chrome支持。見(jiàn)備注

1。//FF下用e.target;

button,發(fā)生事件時(shí)鼠標(biāo)按鍵,IE:1為左鍵,2為右鍵,s4中滑輪//要測(cè)試event.button的值的時(shí)候,請(qǐng)?jiān)趏nmousedown事件中測(cè)試。在onclick事件中只能識(shí)別鼠標(biāo)左鍵的單擊。不同瀏覽器返回值可能不一樣。(不同瀏覽器值不一樣)

除IE瀏覽器外,其他瀏覽器在綁定事件處理函數(shù)時(shí),有一個(gè)默認(rèn)的參數(shù)即event對(duì)象。(*)screen對(duì)象,獲取屏幕的信息:

alert("分辨率:"+screen.width+"*"+screen.height);if

(screen.width<1024

||

screen.height<768){

alert("分辨率太低!");}window對(duì)象的屬性4clipboardData對(duì)象,對(duì)粘貼板的操作。//只支持IE,FF參考資料

setData("Text",val),設(shè)置粘貼板中的值。

getData(“Text”)讀取粘貼板的值,返回值為粘貼板中的內(nèi)容;

clearData(“Text”)清空粘貼板;

案例:復(fù)制地址給友好。見(jiàn)備注。

當(dāng)復(fù)制的時(shí)候body的oncopy方法被觸發(fā),直接returnfalse就是禁止復(fù)制。<body

oncopy="alert('禁止復(fù)制!');return

false;"

很多元素也有oncopy(復(fù)制)、onpaste(粘貼)事件:oncut

案例:禁止粘貼帳號(hào)。見(jiàn)備注。

案例:在網(wǎng)站中復(fù)制文章的時(shí)候,為了防止那些”拷貝黨”不添加文章來(lái)源,自動(dòng)在復(fù)制的內(nèi)容后添加版權(quán)聲明。代碼見(jiàn)下頁(yè):window對(duì)象的屬性4代碼:

function

modifyClipboard()

{

clipboardData.setData('Text',clipboardData.getData('Text')+'本文來(lái)自傳智播客技術(shù)專區(qū),轉(zhuǎn)載請(qǐng)注明來(lái)源。'+location.href);}

oncopy="setTimeout('modifyClipboard()',100)“

用戶復(fù)制動(dòng)作發(fā)生0.1秒以后再去改粘貼板中的內(nèi)容。100ms只是一個(gè)經(jīng)常取值,寫(xiě)1000、10、50、200……都行。不能直接在oncopy里修改粘貼板。

不能直接在oncopy中執(zhí)行對(duì)粘貼板的操作,因此設(shè)定定時(shí)器,0.1秒以后執(zhí)行,這樣就不再oncopy的執(zhí)行調(diào)用棧上了。history操作歷史記錄。

window.history.back()后退;window.history.forward()前進(jìn)。

window.history.go(-1)后退、window.history.go(1)前進(jìn)window對(duì)象的屬性5---documentdocument屬性:

document屬性是window對(duì)象中最復(fù)雜的屬性。

因?yàn)槭褂脀indow對(duì)象成員的時(shí)候可以省略window.,所以一般直接寫(xiě)document。

document的方法:

write();//向文檔中寫(xiě)入內(nèi)容。writeln(),和write差不多,只不過(guò)最后添加一個(gè)回車(chē)。在onclick等事件中寫(xiě)的代碼會(huì)沖掉頁(yè)面中的內(nèi)容,只有在頁(yè)面加載過(guò)程中write才會(huì)與原有內(nèi)容融合在一起。writeln()是在源代碼里面換行。與<br/>不一樣。

document.write()經(jīng)常在廣告代碼、整合資源代碼中被使用。見(jiàn)備注。內(nèi)容聯(lián)盟、廣告代碼、cnzz,不需要被主頁(yè)面的站長(zhǎng)去維護(hù)內(nèi)容,只要被嵌入的js內(nèi)容提供商修改內(nèi)容,顯示的內(nèi)容就變了。

(使用pre標(biāo)簽看write()與writeln()的區(qū)別,效果,見(jiàn)備注1)

Js腳本一執(zhí)行就會(huì)訪問(wèn)服務(wù)器。超鏈接誒還需要點(diǎn)擊。window對(duì)象的屬性6---document最基本的DOM遍歷演示。見(jiàn)備注1。(*)getElementById(),(非常常用),根據(jù)元素的Id獲得對(duì)象,網(wǎng)頁(yè)中id不能重復(fù)。也可以直接通過(guò)元素的id來(lái)引用元素,但是有有效范圍、form1.textbox1之類(lèi)的問(wèn)題(當(dāng)元素放在form中的時(shí)候(在html頁(yè)面中需要通過(guò)form.元素id)),因此不建議直接通過(guò)id操作元素,而是通過(guò)getElementById。getElementsByName(),根據(jù)元素的name獲得對(duì)象,由于頁(yè)面中元素的name可以重復(fù),比如多個(gè)RadioButton的name一樣,因此getElementsByName返回值是對(duì)象數(shù)組。getElementsByTagName(),獲得指定標(biāo)簽名稱的元素?cái)?shù)組,比如getElementsByTagName(“p”)可以獲得所有的<p>標(biāo)簽。*表示所有標(biāo)簽。此處切忌不要使用forin循環(huán)(forin循環(huán)循環(huán)的是鍵值對(duì),不是對(duì)象本身。)。(問(wèn)題多多:radio時(shí)有相同的key,第一個(gè)key是length等等。。)建議:使用for循環(huán)。document.getElementById()/document.all[‘id’](*)window對(duì)象的屬性7---document案例:點(diǎn)擊一個(gè)按鈕,被點(diǎn)擊的按鈕顯示“嗚嗚”,其他按鈕顯示“哈哈”。案例:十秒鐘后協(xié)議文本框下的注冊(cè)按鈕才能點(diǎn)擊,時(shí)鐘倒數(shù)。(btn.disabled=“”,讓元素可用。disabled=disabled,為不可用)disabled=true;練習(xí):加法計(jì)算器。兩個(gè)文本框中輸入數(shù)字,點(diǎn)擊【=】按鈕將相加的結(jié)果放到第三個(gè)文本框中。練習(xí):美女時(shí)鐘。事件冒泡事件冒泡:如果元素A嵌套在元素B中,那么A被點(diǎn)擊不僅A的onclick事件會(huì)被觸發(fā),B的onclick也會(huì)被觸發(fā)。觸發(fā)的順序是“由內(nèi)而外”。驗(yàn)證:在頁(yè)面上添加一個(gè)table、table里有tr、tr里有td,td里放一個(gè)p,在p、td、tr、table中添加onclick事件響應(yīng),見(jiàn)備注。取消事件冒泡:window.event.cancelBubble=true;//IE下的寫(xiě)法。Span設(shè)置display:block;以后再設(shè)置height,width才會(huì)有效。window.onload與body的onload

1.二者效果完全一樣,都是在頁(yè)面內(nèi)容都加載完畢后才觸發(fā)。

2.由于網(wǎng)頁(yè)中沒(méi)有window所以在body中寫(xiě)onload

3.建議使用window.onload//使用js腳本的方式高效

4.其實(shí)應(yīng)該是document.onload,但是所有瀏覽器都實(shí)現(xiàn)到了

window對(duì)象上。事件中的this事件中的this。除了可以使用event.srcElement在事件響應(yīng)函數(shù)中,this表示發(fā)生事件的控件。只有在事件響應(yīng)函數(shù)才能使用this獲得發(fā)生事件的控件,在事件響應(yīng)函數(shù)調(diào)用的函數(shù)中不能使用(這里的this表示window對(duì)象),如果要使用則要將this傳遞給函數(shù)或者使用event.srcElement。(*)this和event.srcElement的語(yǔ)義是不一樣的,this就是表示當(dāng)前監(jiān)聽(tīng)事件的這個(gè)對(duì)象,

event.srcElement是引發(fā)事件的對(duì)象:事件冒泡。<bodyonclick=“//這個(gè)叫做事件響應(yīng)函數(shù),在這里寫(xiě)this表示發(fā)生事件的控件。在這里調(diào)用另外一個(gè)函數(shù)F1,則F1中不能使用this表示發(fā)生事件的控件”>1.通過(guò)“事件冒泡”說(shuō)明this與window.event.srcElement的區(qū)別。2.通過(guò)onclick=f1;與onclick=“f1(this);”在f1中使用this,說(shuō)明

this在不同情況下的使用區(qū)別。動(dòng)態(tài)創(chuàng)建DOMdocument.write只能在頁(yè)面加載過(guò)程中才能動(dòng)態(tài)創(chuàng)建??梢哉{(diào)用document的createElement方法來(lái)創(chuàng)建具有指定標(biāo)簽的DOM對(duì)象,然后通過(guò)調(diào)用某個(gè)元素的appendChild();方法將新創(chuàng)建元素添加到相應(yīng)的元素下。//父元素對(duì)象.removeChild(子元素對(duì)象);刪除元素。function

showIt()

{var

divMain

=

document.getElementById("divMain");var

btn

=

document.createElement("input");btn.type

=

"button";btn.value="我是動(dòng)態(tài)的!";divMain.appendChild(btn);}<div

id="divMain"></div><input

type="button"

value="ok"

onclick="showit()"

/>innerText(兼容IE,不兼容FF)和innerHTML(兼容所有瀏覽器)幾乎所有DOM元素都有innerText、innerHTML屬性(注意大小寫(xiě)),分別是元素標(biāo)簽內(nèi)內(nèi)容的文本表示形式和HTML源代碼,這兩個(gè)屬性是可讀可寫(xiě)的。//FF不支持innerText,在FF下用textContent屬性。也可以用innerHTML設(shè)置普通文本。//編寫(xiě)兼容的innerText,備注1.示例:代碼見(jiàn)備注1。(innerText與innerHTML區(qū)別。)用innerHTML也可以替代createElement,屬于簡(jiǎn)單、粗放型、后果自負(fù)的創(chuàng)建。示例:function

createlink()

{var

divMain

=

document.getElementById("divMain");divMain.innerHTML="<a

href=''>如鵬網(wǎng)</a>";}<span/>的innerHTML和<span></span>的innerHTML不一樣。//建議,在使用之前要保證標(biāo)簽具有開(kāi)始和結(jié)束標(biāo)記,否則,會(huì)出現(xiàn)一些意想不到的后果。(*)通過(guò)能力檢測(cè),寫(xiě)一個(gè)可以兼容FF與IE的使用innerText與textContent的代碼。練習(xí)案例:點(diǎn)擊按鈕動(dòng)態(tài)增加網(wǎng)站列表,分兩列,第一列為網(wǎng)站的名字,第二列為帶網(wǎng)站超鏈接的網(wǎng)站名。增加三行常見(jiàn)網(wǎng)站。瀏覽器兼容性問(wèn)題,見(jiàn)備注。(先聲明一個(gè)dict集合來(lái)存鍵值對(duì)。)動(dòng)態(tài)產(chǎn)生的元素,查看源代碼是看不到的。通過(guò)DebugBar→Dom→文檔→HTML可以看到。練習(xí):點(diǎn)擊按鈕增加一個(gè)網(wǎng)站的超鏈接(增加到body下面的某個(gè)div中。)練習(xí):無(wú)刷新評(píng)論。<table

border="1"><tr><td>貓貓:</td><td>沙發(fā)耶!</td></tr></table>昵稱:<input

type="text"/><br/><textarea

id="txt"></textarea><br

/><input

type="button"value="評(píng)論"/>瀏覽器兼容性問(wèn)題瀏覽器兼容性的例子:ie6,ie7對(duì)table.appendChild("tr")的支持和IE8不一樣,用insertRow、insertCell來(lái)代替或者為表格添加

tbody,然后向tbody中添加tr。FF不支持innerText。所以動(dòng)態(tài)加載網(wǎng)站列表的程序修改為:

vartr=tableLinks.insertRow(-1);//FF必須加-1這個(gè)參數(shù),表追加。如果不是負(fù)數(shù),則表示在某個(gè)索引之前插入。

var

td1

=

tr.insertCell(-1);

td1.innerText

=

key;

var

td2

=

tr.insertCell(-1);

td2.innerHTML

=

"<a

href='"

+

value

+

"'>"

+

value

+

"</a>";或者:(不建議)

<table

id="tableLinks">

<tbody></tbody>

</table>,然后tableLinks.tBodies[0].appendChild(tr);innerHTML還是操作Dom節(jié)點(diǎn)操作頁(yè)面的元素的時(shí)候是用innerHTML的方式還是createElement()、appendChild()與removeChild()的方式?

1.對(duì)于大量進(jìn)行節(jié)點(diǎn)操作時(shí),使用innerHTML的方式性能要好于頻繁的Dom操作(有專門(mén)用C或C++寫(xiě)的html解析器。)。先將頁(yè)面的HTML代碼寫(xiě)好,然后調(diào)用一次innerHTML,而不要反復(fù)調(diào)用innerHTML.

2.對(duì)于使用innerHTML=‘’的方式來(lái)刪除節(jié)點(diǎn),在某些情況下會(huì)存在內(nèi)存問(wèn)題。比如:div下面有很多其他元素,每個(gè)元素都綁定有事件處理程序。此時(shí),innerHTML只是把當(dāng)前元素從節(jié)點(diǎn)樹(shù)上移除了,但是那些事件處理程序依然占用內(nèi)存。代碼是否需要放置到onload中//如果js代碼需要操作頁(yè)面上的元素,則將該代碼放到onload里面。//因?yàn)楫?dāng)頁(yè)面加載完畢之后頁(yè)面上才會(huì)有相關(guān)的元素//如果js代碼中沒(méi)有操作頁(yè)面元素的語(yǔ)句,則可以將該代碼直接寫(xiě)在<script>標(biāo)簽中,//例如:聲明變量,相加求和等操作。<body><!--html標(biāo)簽--><script

type="text/javascript">//寫(xiě)在這里的代碼,由于已經(jīng)是頁(yè)面的底部,在執(zhí)行該代碼時(shí),頁(yè)面的元素已經(jīng)都加載完畢,所以可以不放到onload里面也可以操作頁(yè)面上的元素。//建議將操作頁(yè)面元素的代碼都放到onload里面。</script></body>Js操作頁(yè)面樣式,其他易錯(cuò):修改元素的樣式不是設(shè)置class屬性,而是className屬性。。(class是JavaScript的一個(gè)保留字,屬性不能用關(guān)鍵字、保留字所以就變成className了)案例:網(wǎng)頁(yè)開(kāi)關(guān)燈的效果。修改元素的樣式不能this.style="background-color:Red"。易錯(cuò):?jiǎn)为?dú)修改樣式的屬性使用“style.屬性名”。注意在css中屬性名在JavaScript中操作的時(shí)候?qū)傩悦赡懿灰粯?,主要集中在那些屬性名中含?的屬性,因?yàn)镴avaScript中-是不能做屬性、類(lèi)名的。所以CSS中背景顏色是background-color,而JavaScript則是style.backgroundColor;元素樣式名是class,在JavaScript中是className屬性;

font-size→style.fontSize;margin-top→style.marginTop//駝峰命名法。單獨(dú)修改控件的樣式<input

type=“button”

value=“AAA”onclick=“this.style.color=‘red’”/>。技巧,沒(méi)有文檔的情況下的值屬性名,隨便給一個(gè)元素設(shè)定id,然后在js中就能

id.style.出來(lái)能用的屬性。操作float樣式的時(shí)候,IE與其他瀏覽器不太一樣。IE:obj.style.styleFloat=‘right’;其他瀏覽器:obj.style.cssFloat=‘right’;//通用代碼見(jiàn)備注1.案例練習(xí)案例1:創(chuàng)建三個(gè)輸入文本框,當(dāng)光標(biāo)離開(kāi)文本框的時(shí)候如果文本框?yàn)榭?,則將文本框背景色設(shè)置為紅色,如果不為空則為白色。提示:焦點(diǎn)進(jìn)入控件的事件是onfocus,焦點(diǎn)離開(kāi)控件的事件是onblur。案例2:評(píng)分控件V1,用一個(gè)單行5列的Table做評(píng)分控件,監(jiān)聽(tīng)

td的click事件,點(diǎn)擊一個(gè)td的時(shí)候,將這個(gè)td及之前的td背景變?yōu)榧t色,之后的td背景變?yōu)榘咨?。?dāng)鼠標(biāo)懸浮在評(píng)分控件上的時(shí)候顯示超鏈接形式的鼠標(biāo)圖標(biāo)?!狙菔綣Query版】。自定義簡(jiǎn)易評(píng)分控件代碼:見(jiàn)備注1.練習(xí)練習(xí)1:超鏈接的單選效果。頁(yè)還原為白色。參考:點(diǎn)擊變“嗚嗚”。頁(yè)面上若干個(gè)超鏈接,點(diǎn)擊一個(gè)超鏈接s的時(shí)候被點(diǎn)擊的超鏈接變?yōu)榧t色背景,其他超鏈接背景沒(méi)有變。window.event.returnValue=false;。難點(diǎn)“this”練習(xí)2:點(diǎn)擊按鈕,表格隔行變色:偶數(shù)行為黃色背景,奇數(shù)行為默認(rèn)顏色。通過(guò)table的getElementsByTagName取得所有的tr,依次遍歷,如果是偶數(shù)就…………。練習(xí)3:放若干文本框,獲得焦點(diǎn)的文本框黃色背景,其他控件背景顏色是白色

思路1:監(jiān)聽(tīng)所有input的onfocus事件→將背景設(shè)置為黃色,監(jiān)聽(tīng)所有input的onblur事件→將背景設(shè)置為白色。思路2:只監(jiān)聽(tīng)onfocus和練習(xí)1一樣。練習(xí)4:點(diǎn)擊表格行,被點(diǎn)擊的行高亮顯示(背景是黃色),其他行白色背景。監(jiān)聽(tīng)每個(gè)tr的onclick事件,將點(diǎn)擊的背景設(shè)置為黃色,其他的設(shè)置為白色背景。//對(duì)于table、div、span這類(lèi)型元素沒(méi)有onfocus(獲取焦點(diǎn)的事件(無(wú)法觸發(fā)這些事件。))控制層的顯示修改style.display,例子:切換層的顯示function

togglediv()

{vardiv1

=

document.getElementById('div1');if(div1.style.display

==

'')

{div1.style.display='none';//不顯示}else

{div1.style.display='';//顯示}

}//與元素對(duì)象.enabled=true或readonly=true等不一樣,這里是樣式,不是元素的直接屬性,不能用true或false。案例:按鈕、checkbox,一般想到的都是onchange事件。(使用click事件,避免使用onchange事件。)與超鏈接(3種),顯示層。//動(dòng)態(tài)創(chuàng)建層,移除。案例:鼠標(biāo)放到超鏈接上的時(shí)候顯示一個(gè)圖片或文字(放到div中。)offsetHeight\offsetWidth\offsetLeft\offsetTop動(dòng)態(tài)設(shè)置元素的位置、大小通過(guò)dom讀取元素的top、left、width、height等取到的值不是數(shù)字,而是“10px”這樣的字符串;為這些屬性設(shè)值的時(shí)候IE可以是80、90這樣的數(shù)字,F(xiàn)F、Chrome必須是“80px”、“90%”等這樣的字符串形式,為了兼容統(tǒng)一用字符串形式。left/top需要設(shè)置position易錯(cuò):不要寫(xiě)成div1.style.width=80px,而是div1.style.width=‘80px’;如果要修改元素的大?。▽挾燃?),則首先要取出元素的寬度,然后用parseInt將寬度轉(zhuǎn)換為數(shù)字(parseInt可以將“20px”這樣數(shù)字開(kāi)頭的包含其他內(nèi)容的字符串解析為20,parseInt(‘22px’,10),也就是解析盡可能多的部分);然后加上一個(gè)值,再加上px賦值回去。案例:層的動(dòng)態(tài)改變大小,將層內(nèi)的內(nèi)容隱藏掉(overflow:hidden)。setInterval();IE中body的事件范圍IE中如果在body上添加onclick、onmousemove等事件響應(yīng),那么如果頁(yè)面沒(méi)有滿,則“body中最后一個(gè)元素以下(橫向不限制)”的部分是無(wú)法響應(yīng)事件的,必須使用代碼在document上監(jiān)聽(tīng)那些事件,比如document.onmousemove=MovePicdocument.body.onmousedown=function(){}document.onmousedown=function(){}注意加文檔定義與不加文檔定義的也不一樣。如果為整個(gè)文檔注冊(cè)事件可以使用:document.onxxxx事件。層的操作元素的position

樣式值:static(無(wú)定位,顯示在默認(rèn)位置)、absolute(絕對(duì)定位)、fixed(相對(duì)于窗口的固定定位,位置不會(huì)隨著瀏覽器的滾動(dòng)而變化,IE6不支持)、relative(相對(duì)元素默認(rèn)位置的定位)。如果要通過(guò)代碼修改元素的坐標(biāo)則一般使用absolute,然后修改元素的top(上邊緣距離)、左邊緣距離)兩個(gè)樣式值。left、top都是指的層的左上角的坐標(biāo)left(案例:跟著鼠標(biāo)飛的圖片。提示:鼠標(biāo)移動(dòng)的事件是onmousemove(一邊移動(dòng)事件一邊觸發(fā),而不是移動(dòng)開(kāi)始或者移動(dòng)完成才觸發(fā)),通過(guò)

window.event的clientX、clientY屬性獲得鼠標(biāo)的位置。案例:鼠標(biāo)放到一個(gè)超鏈接的時(shí)候,在鼠標(biāo)的位置顯示一個(gè)黃色背景,帶圖片的懸浮提示,鼠標(biāo)離開(kāi)就消失。提示:鼠標(biāo)進(jìn)入控件的事件是

onmouseover,離開(kāi)的事件是onmouseout。案例:點(diǎn)擊按鈕層動(dòng)態(tài)變大。提示:英文字母連續(xù)單詞不會(huì)在中間自動(dòng)換行的陷阱overflow、word-break:break-all;(查手冊(cè)。)問(wèn)題易錯(cuò):不要寫(xiě)成div1.style.width=80px,而是div1.style.width='80px'修改元素的樣式不能this.style="background-color:Red",哪怕可以的話也是把以前所有樣式都沖掉了。單獨(dú)修改控件的樣式this.style.background='red',只修改要修改的樣式。技巧,沒(méi)有文檔的情況下的值屬性名,隨便給一個(gè)元素設(shè)定id,然后在js中就能id.style.出來(lái)能用的屬性。createElement的兩種用法,注意innerText的問(wèn)題(下面的寫(xiě)法,不推薦,不建議、知道即可(可以幫助排錯(cuò)),只兼容IE.)在IE7及以前版本下,通過(guò)createElement(‘input’)創(chuàng)建兩個(gè)名字一樣的radio也不能選擇,這時(shí)可以通過(guò)下面的方式(把標(biāo)簽寫(xiě)全)。//參考備注1varinput=document.createElement(“<input

type=‘button’

value=‘hello’/>”)快速創(chuàng)建元素,并且賦值,但是注意設(shè)置的inner部分不會(huì)被設(shè)置var

link=

document.createElement(“<a

href=‘’>百度</a>”)(“百度”二字寫(xiě)不進(jìn)去)label.setAttribute(“for”,

“username”);//設(shè)定一些Dom元素屬性名特殊的屬性,label.for=“username”會(huì)有問(wèn)題。

label.setAttribute(“xuehao”,“33333”)//getAttribute(“name”)//removeAttribute("na

me")案例練習(xí)1練習(xí)1:點(diǎn)擊【登錄】按鈕,彈出一個(gè)顯示用戶名、密碼等的層。將用戶名、密碼等寫(xiě)到一個(gè)層中,層默認(rèn)是隱藏的,點(diǎn)擊【登錄】超鏈接以后將層顯示出來(lái),如果點(diǎn)擊層中的關(guān)閉按鈕,則隱藏層。絕對(duì)定位,顯示到中間位置。document.body.clientWidth(獲取頁(yè)面的width)//高度,注意body的默認(rèn)范圍。(去掉<doc

type);margin:0

auto;練習(xí)2:一幅圖片。點(diǎn)擊小圖,彈出一個(gè)層在點(diǎn)擊的位置顯示小圖對(duì)應(yīng)的大圖,并且顯示姓名、身高等信息,點(diǎn)擊層中的關(guān)閉按鈕關(guān)閉層。進(jìn)階:元素的額外屬性。動(dòng)畫(huà)效果的顯示出來(lái)。兩種:靜態(tài);動(dòng)態(tài)載入數(shù)據(jù)。作業(yè):評(píng)分控件V2。用一個(gè)單行5列的Table,td中默認(rèn)都是

starEmpty.jpg這個(gè)圖片。監(jiān)聽(tīng)td的mouseover事件,鼠標(biāo)在一個(gè)td的時(shí)候?qū)⑦@個(gè)td及之前的td的內(nèi)容換成starFill.jpg這個(gè)圖片。鼠標(biāo)在評(píng)分控件上的時(shí)候顯示超鏈接形式的鼠標(biāo)圖標(biāo)。獲取td中的img見(jiàn)備注3。案例:注冊(cè)頁(yè)面,點(diǎn)擊“高級(jí)”CheckBox,則顯示高級(jí)選項(xiàng),否則隱藏補(bǔ)充問(wèn)題當(dāng)設(shè)置了層的邊框,margin,padding等問(wèn)題的時(shí)候通過(guò)offsetHeight獲取的高度問(wèn)題。document.getElementById('dv1').offsetHeight;document.getElementById('dv1').currentStyle.heightwindow.getComputedStyle(document.getElementById('dv1'),null).height案例練習(xí)2練習(xí):界面上有幾個(gè)球隊(duì)名字的列表,將鼠標(biāo)放到球隊(duì)名字上就變?yōu)榧t色背景,其他球隊(duì)背景顏色為白色,點(diǎn)擊一個(gè)球隊(duì)的時(shí)候就將點(diǎn)擊的球隊(duì)變?yōu)閒ontSize=30字體(fontSize=‘’回到默認(rèn))。Ul→li練習(xí):顯示數(shù)字時(shí)鐘,時(shí)間顯示到一個(gè)div中。思路:setInterval()\innerHTMl。練習(xí):有一個(gè)搜索文本框,焦點(diǎn)不在文本框中的時(shí)候,如果文本框沒(méi)有值,則文本框中顯示灰色文本(Gray)的“輸入搜索關(guān)鍵詞”,否則顯示用戶輸入的值;焦點(diǎn)在文本框中時(shí)如果之前顯示“輸入搜索關(guān)鍵詞”則清空文本框的值,并且將文本修改為黑色。onfocus的時(shí)候如果文本框中的值為“輸入搜索關(guān)鍵詞”,則清空文本框,并且恢復(fù)文本框的顏色為Black;onblur的時(shí)候如果文本框中沒(méi)有值,則將文本框的值設(shè)置為“輸入搜索關(guān)鍵詞”并且文本框中顯示灰色文本(Gray)

style.color='Gray'。(五分鐘)form對(duì)象document.getElementById(‘btn1’).click()。搜索引擎的,智能提示,點(diǎn)擊后相當(dāng)于點(diǎn)擊了“搜索”按鈕。常用:click(),focus(),blur();//相當(dāng)于通過(guò)程序來(lái)觸發(fā)元素的單擊、獲得焦點(diǎn)以及失去焦點(diǎn)的事件。form對(duì)象是表單的Dom對(duì)象。方法:submit()提交表單,但是不會(huì)觸發(fā)onsubmit事件。實(shí)現(xiàn)autopost,也就是焦點(diǎn)離開(kāi)控件以后頁(yè)面立即提交,而不是只有提交submit按鈕以后才提交,當(dāng)光標(biāo)離開(kāi)的時(shí)候觸發(fā)onblur事件,在onblur中調(diào)用form的submit方法。代碼見(jiàn)備注。在點(diǎn)擊submit后form的onsubmit事件被觸發(fā),在onsubmit中可以進(jìn)行數(shù)據(jù)校驗(yàn),如果數(shù)據(jù)有問(wèn)題,返回false即可取消提交<form

name="form1"

action="a.aspx"

method="get"onsubmit="if(document.getElementById('txtname').value.length<=0){alert('姓名必填');return

false;}">不同瀏覽器的差異(*)面試題:說(shuō)說(shuō)開(kāi)發(fā)項(xiàng)目的時(shí)候不同瀏覽器的不同點(diǎn),你是怎么解決的?appendChild,insertCell,px不同瀏覽器中對(duì)DOM支持的方法不一樣獲取網(wǎng)頁(yè)中那個(gè)元素觸發(fā)了事件:在IE里使用srcElement

;在FireFox里使用target使用Dom獲取和更改網(wǎng)頁(yè)標(biāo)簽元素內(nèi)文本:在IE里使用innerText;在FireFox里使用textContent動(dòng)態(tài)為網(wǎng)頁(yè)或元素綁定事件:在IE中綁定事件的方法是attachEvent;在FireFox中綁定事件的方法是addEventListener

(類(lèi)似于多播委托。使用該方法是還有一些其他的注意事項(xiàng))更多。不同瀏覽器中對(duì)CSS的支持不一樣,所以出現(xiàn)在IE中顯示正常的網(wǎng)頁(yè),在FF下全部亂掉了。哀悼網(wǎng)頁(yè)使用的CSS只有IE支持,F(xiàn)F都不支持。filter:gray;JQuery之類(lèi)的框架進(jìn)行了封裝,將不同瀏覽器的差異幫開(kāi)發(fā)人員處理了,開(kāi)發(fā)人員只要調(diào)用JQuery的方法,JQuery會(huì)幫助在不同瀏覽器中進(jìn)行翻譯。用JQuery就可以解決不同瀏覽器上Dom的不同。對(duì)于CSS的不同是美工的事,IETester、FF、Chrome。JS中的正則表達(dá)式復(fù)習(xí)C#正則表達(dá)式。JavaScript中創(chuàng)建正則表達(dá)式類(lèi)的方法:1.varregex=newRegExp(“\\d{5}”)(這種寫(xiě)法僅用于動(dòng)態(tài)生成正則表達(dá)式的情況下)或者2.var

regex=/^\d{5}$/(推薦)/表達(dá)式/是JavaScript中專門(mén)為簡(jiǎn)化正則表達(dá)式編寫(xiě)而提供的語(yǔ)法,寫(xiě)在//中的正則表達(dá)式就不用管轉(zhuǎn)義符了。RegExp對(duì)象的方法:(1)test(str)判斷字符串str是否匹配正則表達(dá)式,相當(dāng)于IsMatchvar

regex

=

/.+@.+/;alert(regex.test("

"));alert(regex.test("

"));(2)exec(str)進(jìn)行搜索匹配,返回值為匹配結(jié)果(*),相當(dāng)于c#中match()和matches()如果exec()找到了匹配的文本,則返回一個(gè)結(jié)果數(shù)組(完全匹配的字符串以及提取組的結(jié)果。)。否則,返回null。要提取多個(gè)需要反復(fù)調(diào)用exec()類(lèi)似于

matches()方法。//注意全局模式/…../g在非全局模式下,調(diào)用一次exec()相當(dāng)于match();在全局模式下連續(xù)多次調(diào)用相當(dāng)于matches()string的正則表達(dá)式方法String對(duì)象中提供了一些與正則表達(dá)式相關(guān)的方法,相當(dāng)于對(duì)于RegExp類(lèi)的包裝,簡(jiǎn)化調(diào)用:match(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論