版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
北風(fēng)網(wǎng)項(xiàng)目培訓(xùn)第5講:表格排序及JS拖動(dòng)講師:風(fēng)舞煙JavaScript-JQuery系列全程精通+圖書(shū)館管理系統(tǒng)實(shí)戰(zhàn)]目標(biāo)數(shù)組排序(基礎(chǔ))對(duì)單列的表格排序?qū)Χ嗔械谋砀衽判驅(qū)Σ煌瑪?shù)據(jù)類型進(jìn)行排序高級(jí)排序模擬拖動(dòng)表格排序一、數(shù)組排序例:
vararr=[3,32,5,34];arr.sort();alert(arr.toString());//output“3,32,34,5”問(wèn)題:如何實(shí)現(xiàn)正確的排序?一個(gè)基本的比較函數(shù):functioncomparison_function(value1,value2){if(value1<value2)return-1elseif(value1>value2)return1elsereturn0}//說(shuō)明:返回1代表升序,返回-1代表降序,返回0代表相等表格排序vararr=[3,32,5,34];arr.sort(comparison_function);alert(arr.toString());//output“3,5,32,34”如果要降序?functioncomparison_function(value1,value2){if(value1<value2)return1elseif(value1>value2)return-1elsereturn0}表格排序vararr=[3,32,5,34];arr.sort(comparison_function);alert(arr.toString());//output“34,32,5,3”reverse()方法vararr=[3,32,5,34];arr.sort(comparison_function);alert(arr.toString());//output“34,32,5,3”arr.reverse();alert(arr.toString());//output“3,5,32,34”說(shuō)明:如果數(shù)組已經(jīng)以一種順序排序了,使用reverse()方法將其按照相反的順序排序,要比再次調(diào)用sort()快得多表格排序二、對(duì)單列的表格排序
Demo1
Demo1_Code如何獲取td中的值<tableborder="1"id="table1"><thead><tr> <th>firstName</th> </tr> </thead> <tbody> <tr> <td>zhang</td> </tr><tr> <td>wang</td> </tr> </tbody></table>表格排序varoTable=document.getElementById(“table1”);varoTbody=oTable.tBodies[0];varcolDataRows=oTbody.rows;varname=colDataRows[0].cells[0].firstChild.nodeValue;比較函數(shù)://升序
functioncomparisonTRs(oTR1,oTR2){varvalue1=oTR1.cells[0].firstChild.nodeValue; varvalue2=oTR2.cells[0].firstChild.nodeValue; if(value1<value2) return-1 elseif(value1>value2) return1 else return0}表格排序functionSortTable(sTableID) { varoTable=document.getElementById(sTableID); varoTBody=oTable.tBodies[0]; varcolDataRows=oTBody.rows; ... }問(wèn)題:colDataRows是DOM集合,不是數(shù)組,沒(méi)有sort()方法,解決方案是創(chuàng)建一個(gè)數(shù)組,并將<tr/>元素放入其中,對(duì)其排序,最后使用DOM將其按順序逐個(gè)放置表格排序改進(jìn)一:functionSortTable(sTableID) { varoTable=document.getElementById(sTableID); varoTBody=oTable.tBodies[0]; varcolDataRows=oTBody.rows; varoTRs=newArray(); for(vari=0;i<colDataRows.length;i++) { aTRs.push(colDataRows[i]); } aTRs.sort(comparisonTRs); .... }表格排序改進(jìn)二:functionSortTable(sTableID) { varoTable=document.getElementById(sTableID); varoTBody=oTable.tBodies[0]; varcolDataRows=oTBody.rows; varoTRs=newArray(); for(vari=0;i<colDataRows.length;i++) { oTRs.push(colDataRows[i]); } oTRs.sort(comparisonTRs); varoFragment=document.createDocumentFragment(); for(vari=0;i<oTRs.length;i++) { oFragment.appendChild(oTRs[i]); } oTBody.appendChild(oFragment); }表格排序三、對(duì)多列表格進(jìn)行排序
Demo2
Dem2_Code表格排序<tableborder="1"id="tblSort"><thead><tr><thonclick="sortTable('tblSort',0)"style="cursor:pointer">LastName</th><thonclick="sortTable('tblSort',1)"style="cursor:pointer">FirstName</th></tr></thead><tbody><tr><td>Smith</td><td>John</td></tr><tr><td>Johnson</td><td>Betty</td></tr>表格排序<tr><td>Henderson</td><td>Nathan</td></tr><tr><td>Williams</td><td>James</td></tr><tr><td>Gilliam</td><td>Michael</td></tr><tr><td>Walker</td><td>Matthew</td></tr></tbody></table>表格排序比較函數(shù)生成器:
functiongenCompareTo(iCol){ returnfunctioncompareTRs(oTR1,oTR2) { varsValue1=oTR1.cells[iCol].firstChild.nodeValue; varsValue2=oTR2.cells[iCol].firstChild.nodeValue; returnsValue1.localCompare(sValue2); } }表格排序定義好這個(gè)函數(shù)后,就可根據(jù)需要排序的列生成相應(yīng)的比較函數(shù)了varcompareTRs=genCompareTo(0);varcompareTRs1=genCompareTo(1);varcompareTRs2=genCompareTo(2);對(duì)某列排序aTRs.sort(genCompareTo(0));//對(duì)第一列排序aTRs.sort(genCompareTo(1));//對(duì)第二列排序aTRs.sort(genCompareTo(2));//對(duì)第三列排序表格排序四、對(duì)不同數(shù)據(jù)類型進(jìn)行排序在很多情況下,需要進(jìn)行排序的列是包含各種不同的數(shù)據(jù)類型的,因?yàn)镈OM的文本節(jié)點(diǎn)只是字符串,這意味著進(jìn)行任何排序之前,必須對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換。
Demo3
Demo3_Code表格排序1、創(chuàng)建轉(zhuǎn)換函數(shù)
functionconvert(sValue,sDataType){switch(sDataType){case"int": returnparseInt(sValue); case"float": returnparseFloat(sValue); case"date": returnnewDate(Date.parse(sValue)); default returnsValue.toString();}}表格排序2、修改代碼:
functiongenCompareTo(iCol,sDataType){ returnfunctioncompareTRs(oTR1,oTR2) { varsValue1=convert(oTR1.cells[iCol].firstChild.nodeValue,sDataType); varsValue2=convert(oTR2.cells[iCol].firstChild.nodeValue,sDataType); if(sValue1<sValue2) { return-1; }elseif(sValue1>sValue2) { return1; }else{ return0; } }}表格排序高級(jí)排序問(wèn)題:如果表格中出現(xiàn)鏈接、圖像或某種HTML的內(nèi)容,而用戶仍希望對(duì)其進(jìn)行排序。最常見(jiàn)的情況也許就是包含圖標(biāo)的列.解決方案:
Demo4
Demo4_Code1、候選值表格中的每個(gè)單元格必須包含可排序的值,也就是說(shuō)至少有一個(gè)值屬于以下數(shù)據(jù)類型:字符串、整形、浮點(diǎn)數(shù)和日期,因?yàn)镠TML代碼不能直接被轉(zhuǎn)化為這些數(shù)據(jù)類型,所以需指定一個(gè)候選值??梢酝ㄟ^(guò)以下方式實(shí)現(xiàn):如:<tdvalue=“blue”><imgsrc=“blueimag.gif”/></td>表格排序排序函數(shù)functiongenCompareTo(iCol,sDataType){ returnfunctioncompareTRs(oTR1,oTR2) { varsValue1; varsValue2; if(oTR1.cells[iCol].getAttribute("value")) { sValue1=convert(oTR1.cells[iCol].getAttribute("value"),sDataType); sValue2=convert(oTR2.cells[iCol].getAttribute("value"),sDataType); }else { sValue1=convert(oTR1.cells[iCol].firstChild.nodeValue,sDataType); sValue2=convert(oTR2.cells[iCol].firstChild.nodeValue,sDataType); }表格排序 if(sValue1<sValue2) { return-1; }elseif(sValue1>sValue2) { return1; }else{ return0; } }}模擬托放模擬拖放1、經(jīng)典的鼠標(biāo)拖尾
演示模擬托放核心代碼:<scripttype="text/javascript">functionhandleMouseMove(){ varoEvent=window.event;varoDiv=document.getElementById("div1");oDiv.style.left=oEvent.clientX;oDiv.style.top=oEvent.clientY;}</script>模擬拖動(dòng)
演示核心代碼:<body><p>Trydraggingtheredsquare.</p><p><divid="div1"onmousedown="handleMouseDown()"></div></p></body><styletype="text/css">#div1{background-color:red;height:100px;width:100px;position:absolute;}</style>functionhandleMouseMove(){varoEvent=window.event;varoDiv=document.getElementById(“div1”);oDiv.style.left=oEvent.clientX;oDiv.style.top=oEvent.clientY;}問(wèn)題:第一次拖動(dòng)時(shí),會(huì)產(chǎn)生一個(gè)偏移,讓用戶感覺(jué)不自然,改進(jìn):
演示改進(jìn)核心代碼:variDiffX=0;variDiffY=0;functionhandleMouseDown(){varoEvent=window.event;varoDiv=document.getElementById("div1");iDiffX=oEvent.clientX
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人醫(yī)療貸款合同
- 空調(diào)系統(tǒng)故障維修合同
- 2024年物流公司轉(zhuǎn)讓合同范本
- 湖南省七年級(jí)上學(xué)期語(yǔ)文期中試卷9套【附答案】
- 業(yè)主/咨詢工程師標(biāo)準(zhǔn)服務(wù)協(xié)議書(shū)樣本
- 2024自己和單位簽的勞動(dòng)合同自己沒(méi)有保留
- 2024家具買(mǎi)賣(mài)的合同模板
- 無(wú)財(cái)產(chǎn)分割離婚協(xié)議書(shū)2024年模板
- 2024年購(gòu)銷青年雞合同范本
- 國(guó)際技術(shù)引進(jìn)代理合同專業(yè)版
- DB3502T 148-2024中小型水庫(kù)生產(chǎn)運(yùn)行標(biāo)準(zhǔn)化管理規(guī)程
- 公司組織機(jī)構(gòu)管理制度
- 預(yù)習(xí)-21《蟬》導(dǎo)學(xué)案
- 四年級(jí)數(shù)學(xué)上冊(cè) 第4章《運(yùn)算律》單元測(cè)評(píng)必刷卷(北師大版)
- 期中測(cè)試卷(試題)-2024-2025學(xué)年數(shù)學(xué)五年級(jí)上冊(cè)北師大版
- 2023年醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理制度
- 教學(xué)能力大賽“教案”【決賽獲獎(jiǎng)】-
- 諾貝爾獎(jiǎng)介紹-英文幻燈片課件
- 球墨鑄鐵管、鋼管頂管穿路施工方案
- 手術(shù)室課件教學(xué)課件
- 2024年新人教版一年級(jí)上冊(cè)數(shù)學(xué)課件 四 11~20的認(rèn)識(shí) 第7課時(shí) 解決問(wèn)題
評(píng)論
0/150
提交評(píng)論