中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)頁制作 > Ajax標(biāo)簽導(dǎo)航實例詳解
再談文字溢出問題 回到列表 XMLHTTPRequest的屬性和方法簡介
 Ajax標(biāo)簽導(dǎo)航實例詳解

作者:yaohaixiao 時間: 2008-02-25 文檔類型:原創(chuàng) 來自:藍(lán)色理想

第 1 頁 代碼篇
第 2 頁 CSS技巧篇
第 3 頁 Javascript技巧篇
第 4 頁 DOM技巧篇
第 5 頁 大結(jié)局

Javascript技巧篇(arguments對象的運用技巧)

好了,我們現(xiàn)在已經(jīng)把CSS樣式寫好了,現(xiàn)在就開始用腳本來控制了。通過剛才講解標(biāo)簽樣式的時候,其實我們也基本把腳本控制的邏輯流程分析了下:

  1. 選中當(dāng)前標(biāo)簽的背景要區(qū)別顯示;
  2. 選中標(biāo)簽和其前一個標(biāo)簽的分隔線要隱藏;

不過在改變標(biāo)簽樣式這個步驟開始之前我們要給我們的標(biāo)簽菜單(ul)來設(shè)置onclick事件(功能函數(shù)),從而觸發(fā)改變當(dāng)前選中項的樣式的事件。到我們的主題了,呵呵!快來看看代碼吧:

/* ===========================================================
* 函數(shù)名稱:tabsEvent()
* 參數(shù)說明:要設(shè)置事件的DOM節(jié)點ID
* 函數(shù)功能:為導(dǎo)航TAB菜單(li)設(shè)置onclick處理方法(函數(shù)),
*           屏蔽掉a標(biāo)簽?zāi)J(rèn)的處理(打開新鏈接)事件
* 返 回 值:false - 屏蔽掉a標(biāo)簽?zāi)J(rèn)的處理(打開新鏈接)事件
* 使用方法:tabsEvent("news","sports");
============================================================ */
function tabsEvent(){
      for(var i=0;i<arguments.length;i++){
         var tabs = $(arguments[i]);
         // DOM節(jié)點(tabs)不存在或者瀏覽器不支持getElementsByTagName()方法
         // 函數(shù)不執(zhí)行
           if(!tabs || !document.getElementsByTagName) return false;
              
           var theList = tabs.getElementsByTagName("li"); // 搜尋導(dǎo)航標(biāo)簽(ID為tabs)里的所有l(wèi)i標(biāo)簽
           var theLink = tabs.getElementsByTagName("a");  // 搜尋導(dǎo)航標(biāo)簽(ID為tabs)里的所有a標(biāo)簽
              
           for(var j=0;j<theList.length;j++){
                 var theTab = theList[j];
                 if(theTab.parentNode!=tabs) continue;
                    
                 var theA = theLink[j];
                 // 屏蔽掉a標(biāo)簽?zāi)J(rèn)的處理(打開新鏈接)事件
                 theA.onclick = function(){
                     return false;   
                 }
                
                 // 為導(dǎo)航TAB菜單(li)設(shè)置onclick處理方法(函數(shù))   
                 theTab.onclick = function(){
                  var theClass = this.className;
                  if(theClass!="current" && theClass!="first"){
                            var objId = this.getAttribute("id").split("-")[1]; // 當(dāng)前選中標(biāo)簽(li)在菜單(ul)中的索引值
                            var tarObj = this.getAttribute("id").split("-")[0]; // 要顯示信息的目標(biāo)DOM節(jié)點ID值
                       var theURL = tarObj + "/" + tarObj + objId + ".htm"; // 要異步加載的URL地址
                         ajaxInject($(tarObj),objId,tarObj,theURL);   
                         return false;
                     }
               }
           }
      }     
}

上面這段腳本,我們使用了$(i)函數(shù)獲取DOM節(jié)點,方法就是$("DOMId"),這里就不多說了。這里要花些時間講的是arguments對象,恩,...,恩,開始講arguments對象了,注意聽講(不是在賣弄哦,這個我們經(jīng)常要用到的,也很重要的一個知識點):

Arguments是進(jìn)行函數(shù)調(diào)用時,除了指定的參數(shù)外,還另外創(chuàng)建的一個隱藏對象。Arguments是一個類似數(shù)組但不是數(shù)組的對象,說它類似數(shù)組是因為其具有數(shù)組一樣的訪問性質(zhì)及方式,可以由arguments[n]來訪問對應(yīng)的單個參數(shù)的值,并擁有數(shù)組長度屬性length。還有就是arguments對象存儲的是實際傳遞給函數(shù)的參數(shù),而不局限于函數(shù)聲明所定義的參數(shù)列表,而且不能顯式創(chuàng)建 arguments 對象。arguments 對象只有函數(shù)開始時才可用。

”隱藏對象“,怎么個隱藏法呢?看看我們函數(shù)的寫法吧:

function tabsEvent(){
...
}

而我在調(diào)用這個函數(shù)是確是這么寫的:

<script language="javascript" type="text/javascript">
<!--
tabsEvent("news","sports");
//-->
</script>

“tabsEvent("news","sports");”, 我使用了參數(shù),而我定義tabsEvent時,卻沒有使用形參(形參個數(shù)為零),就是這么個隱藏法。

它像數(shù)組,而又不是數(shù)組,怎么解釋了?還是看個說明arguments不是數(shù)組(Array類)的代碼:

Array.prototype.selfvalue = 1;
alert(new Array().selfvalue);

function testAguments(){
    alert(arguments.selfvalue);
}

運行代碼你會發(fā)現(xiàn)第一個alert顯示1,這表示數(shù)組對象擁有selfvalue屬性,值為1。而當(dāng)你調(diào)用函數(shù)testAguments時,你會發(fā)現(xiàn)顯示的是“undefined”,說明了selfvalue不是arguments的屬性,即arguments并不是一個數(shù)組對象。

呵呵,又說了這么多,要將就講徹底些:caller、callee、apply、call都講講吧,^-^!

caller - 返回一個對函數(shù)的引用,該函數(shù)調(diào)用了當(dāng)前函數(shù)。

對于函數(shù)來說,caller 屬性只有在函數(shù)執(zhí)行時才有定義。如果函數(shù)是由頂層調(diào)用的,那么 caller 包含的就是 null 。如果在字符串上下文中使用 caller 屬性,那么結(jié)果和 functionName.toString 一樣,也就是說,顯示的是函數(shù)的反編譯文本。 下面的例子說明了 caller 屬性的用法:

function callerDemo() {
   if (callerDemo.caller) {
       var a = callerDemo.caller.toString();
       alert(a);
   }
   else {
       alert("this is a top function");
   }
}

function handleCaller() {
   callerDemo();
}

handleCaller();
callerDemo();

我們通過handleCaller();調(diào)用執(zhí)行callerDemo();時callerDemo.caller才定義,可以看到一個警告框,顯示的反編譯的handleCaller()的文本。而直接使用callerDemo();時,我們callerDemo函數(shù)的caller是沒有定義的,所以你會看到”this is a top function“提示字符。

callee - 返回正被執(zhí)行的 Function 對象,也就是所指定的 Function 對象的正文。 用法[function.]arguments.callee,可選項 function 參數(shù)是當(dāng)前正在執(zhí)行的 Function 對象的名稱。

callee 屬性是 arguments 對象的一個成員,它表示對函數(shù)對象本身的引用,這有利于匿名函數(shù)的遞歸或者保證函數(shù)的封裝性,例如下邊示例的遞歸計算1到n的自然數(shù)之和。而該屬性僅當(dāng)相關(guān)函數(shù)正在執(zhí)行時才可用。還有需要注意的是callee擁有l(wèi)ength屬性,這個屬性有時候用于驗證還是比較好的。arguments.length是實參長度,arguments.callee.length是形參長度,由此可以判斷調(diào)用時形參長度是否和實參長度一致。

//callee可以打印其本身
function calleeDemo() {
   alert(arguments.callee);
}

//用于驗證參數(shù)
function calleeLengthDemo(arg1, arg2) {
   if (arguments.length==arguments.callee.length) {
       alert("驗證形參和實參長度一致!");
       return;
   }
   else {
       alert("實參長度:" +arguments.length);
       alert("形參長度: " +arguments.callee.length);
   }
}

//遞歸計算
var sum = function(n){
   if (n <= 0) {
      return 1;
   }
   else{
      return n + arguments.callee(n - 1);
   }
}

調(diào)用alert(sum(9));時,其中函數(shù)內(nèi)部包含了對sum自身的引用,函數(shù)名僅僅是一個變量名,在函數(shù)內(nèi)部調(diào)用sum即相當(dāng)于調(diào)用一個全局變量,不能很好的體現(xiàn)出是調(diào)用自身,這時使用callee會是一個比較好的方法。

apply 和 call 它們的作用都是將函數(shù)綁定到另外一個對象上去運行,兩者僅在定義參數(shù)方式時有所區(qū)別:

apply(thisArg,argArray);

call(thisArg[,arg1,arg2…] ]);

即所有函數(shù)內(nèi)部的this指針都會被賦值為thisArg,這可實現(xiàn)將函數(shù)作為另外一個對象的方法運行的目的

apply的說明:如果 argArray 不是一個有效的數(shù)組或者不是 arguments 對象,那么將導(dǎo)致一個 TypeError。如果沒有提供 argArray 和 thisArg 任何一個參數(shù),那么 Global 對象將被用作 thisArg,并且無法被傳遞任何參數(shù)。

call的說明:call 方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisArg 指定的新對象。 如果沒有提供 thisArg 參數(shù),那么 Global 對象被用作 thisArg。

應(yīng)用call和apply還有一個技巧在里面,就是用call和apply應(yīng)用另一個函數(shù)(類)以后,當(dāng)前的函數(shù)(類)就具備了另一個函數(shù)(類)的方法或者是屬性,這也可以稱之為“繼承”。看下面示例:

// 繼承的演示
function base() {
    this.member = "dnnsun_Member";
    this.method = function() {
         alert(this.member);
    }
}

function extend() {
    base.call(this);
    alert(member);
    alert(this.method);
}

上面的例子可以看出,通過call之后,extend可以繼承到base的方法和屬性。

呵呵,你可能發(fā)現(xiàn)了,在javascript框架prototype里就使用apply來創(chuàng)建一個定義類的模式,其實現(xiàn)代碼如下:

var Class = {
   create: function() {
       return function() {
           this.initialize.apply(this, arguments);
       }
   }
}

從代碼看,該對象僅包含一個方法:Create,其返回一個函數(shù),即類。但這也同時是類的構(gòu)造函數(shù),其中調(diào)用initialize,而這個方法是在類創(chuàng)建時定義的初始化函數(shù)。通過如此途徑,就可以實現(xiàn)prototype中的類創(chuàng)建模式,示例代碼:

var vehicle=Class.create();

vehicle.prototype={
   initialize:function(type){
       this.type=type;
   }

   showSelf:function(){
       alert("this vehicle is "+ this.type);
   }
}

var moto=new vehicle("Moto");
moto.showSelf();

呵呵,越扯越多了,現(xiàn)在清楚了arguments對象的用法了吧!哈哈,還是有些收獲的吧?^-^!!! 不過該回到我們的主題了,怎么實現(xiàn)點擊標(biāo)簽(li)觸發(fā)更改樣式的事件。還是接著看我們的ajaxtab.js的代碼吧:

for(var i=0;i<arguments.length;i++){
         var tabs = $(arguments[i]); 
}
  

看看上面講的arguments的用法,呵呵,這里我們就獲取了全部的標(biāo)簽導(dǎo)航菜單了。arguments.length = ?等于2,arguments[i]是什么,就是我們傳的參數(shù)本身(tabsEvent("news","sports");),那么$(arguments[i])就是我們的標(biāo)簽菜單,具體點就是$("news")和$("sports")了

出處:藍(lán)色理想
責(zé)任編輯:moby

上一頁 CSS技巧篇 下一頁 DOM技巧篇

◎進(jìn)入論壇網(wǎng)頁制作WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。

相關(guān)文章 更多相關(guān)鏈接
不用組件實現(xiàn)Ajax效果
用 AjaxTags 簡化 Ajax 開發(fā)
靜態(tài)頁面分頁的AJAX實現(xiàn)
Ajax的小貼士
AJAX通用類:AJAXRequest v0.3
作者文章
XMLHTTPRequest的屬性和方法簡介
Ajax標(biāo)簽導(dǎo)航效果
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗 UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點最新 站點最新列表
周大!熬•自然”設(shè)計大賽開啟
國際體驗設(shè)計大會7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計算如何讓安全問題可控
云計算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:3/51個記錄/頁 轉(zhuǎn)到 頁 共5個記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點的水印,亦不能抹去我站點水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計》
犀利開發(fā)—jQuery內(nèi)核詳解與實踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2