<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    秋風的蕭瑟 又見湖邊木葉飛

    歡迎來到梁良 | LonBlog,這里記錄下了我生活點點滴滴。

    豆瓣的jQuery使用技巧

    Douban是2.0 社區里面比較成功的一個產品, 里面ajax技術也做得不錯, 把它的源碼拿來研究了一下, 它在頁面上使用了jquery,  我比較喜歡它的一體式的事件處理機制,不用寫很多的事件綁定代碼,只需要通過一定的命名規則就可以自動給頁面元素加上一些功能, 它上面幾乎所有的功能都通過這個實現, 配合jquery強大的選擇器,代碼看起來比較簡潔清晰.  下面我們就來看看它的一些核心部分. 我使用的是jquery 1.2.3,壓縮之后29kb大小, 速度感覺上比以前有比較大的改善.廢話不多說了,直接看看代碼吧. 另外推薦一下blueprint 這個css框架,還挺好用的.

    //定義命名空間
    var Bowtech=new Object();

    //注冊全局的事件監視器.
    Bowtech.EventMonitor = function(){
        
    this.listeners = new Object();
    }

    //廣播事件
    Bowtech.EventMonitor.prototype.broadcast=function(widgetObj, msg, data){
        
    var lst = this.listeners[msg];

        
    if(lst != null){
            
    for(var o in lst){
                lst[o](widgetObj, data);
            }

        }

    }

    //綁定所有的事件. 
    Bowtech.EventMonitor.prototype.subscribe=function(msg, callback){
        
    var lst = this.listeners[msg];
        
    if (lst) {
            lst.push(callback);
        }
     else {
            
    this.listeners[msg] = [callback];
        }

    }

    //取消事件綁定.
    Bowtech.EventMonitor.prototype.unsubscribe=function(msg, callback){
        
    var lst = this.listener[msg];
        
    if (lst != null){
            lst 
    = lst.filter(function(ele, index, arr){return ele!=callback;});
        }

    }


    // Page scope event-monitor obj.
    var event_monitor = new Bowtech.EventMonitor();
    //對于所有 class="j a_xxx yyy" id="xxx-123"的元素執行事件綁定, xxx-123部分用來獲取元素的ID,比如一個帖子的ID,
    //
     a_xxx  后面的部
    //
    分用來標識應用如 vote / review / blog 等.
    //
    綁定的事件就是 :  Bowtech.init_vote / Bowtech.init_blog 等.
    function load_event_monitor(root) {
        
    var re = /a_(\w+)///正則表達式獲取ID.
        var fns = {};
        $(
    ".j", root).each(function(i) {
            
    var m = re.exec(this.className);
            
    if (m) {
                
    var f = fns[m[1]];
                
    if (!f) //如果事件處理函數不存在則創建函數對象.
                    f = eval("Bowtech.init_"+m[1]); 
                    fns[m[
    1]] = f;//調用綁定函數.
                }

                f 
    && f(this);
            }

        }
    );
    }

    //在文檔加載完畢后將執行的方法(參見jquery文檔)
    //
    一般來說文檔加載的時候應該綁定所有的事件, 但是有一種情況例外.
    //
    比如 通過Ajax方法取回來的內容里面還含有動作按鈕的,這時需要針對這部分功能執行綁定.
    //
    需要手動調用 load_event_monitor(element);  方法.
    $(function() {
        load_event_monitor(document);
    }
    );
    //注意這里的o對象是一個html 元素而非是一個jquery對象,所以在調用它的方法時應該使用$(o)函數
    //
    把它轉化為jquery對象.
    Bowtech.init_forder = function(o) {
        
    var eid = $(o).attr("id").split("-")[1];
        
    var fo = $("#f-"+eid);
        
    var unfo = $("#unf-"+eid);
        
        fo.click(
    function() {
           $(o).hide();
           unfo.show();
           fo.hide();
        }
    );
        unfo.click(
    function() {
            $(o).show();
            fo.show();
            unfo.hide();
        }
    );
    }



    jQuery.fn.extend(
    {
        set_caret: 
    function(){
            
    if(!$.browser.msie) return;
            
    var initSetCaret = function(){this.caretPos = document.selection.createRange().duplicate()};
            
    this.click(initSetCaret).select(initSetCaret).keyup(initSetCaret);
        }

        insert_caret:
    function(textFeildValue){
            
    var textObj = this[0];
            
    if(document.all && textObj.createTextRange && textObj.caretPos){
                
    var caretPos=textObj.caretPos;
                caretPos.text 
    = caretPos.text.charAt(caretPos.text.length-1== '' ? textFeildValue+'' : textFeildValue;
            }
     else if(textObj.setSelectionRange){
                
    var rangeStart=textObj.selectionStart;
                
    var rangeEnd=textObj.selectionEnd;
                
    var tempStr1=textObj.value.substring(0,rangeStart);
                
    var tempStr2=textObj.value.substring(rangeEnd);
                textObj.value
    =tempStr1+textFeildValue+tempStr2;
                textObj.focus();
                
    var len=textFeildValue.length;
                textObj.setSelectionRange(rangeStart
    +len,rangeStart+len);
                textObj.blur();
            }
     else {
                textObj.value
    +=textFeildValue;
            }

        }

    }
    )


    前臺要用就比較簡單了,  只需要這樣寫:

    <div id="test2" class="mod">
                    
    <h3>
                        這里可以放標題
                    
    h3>
                    
    <div class="j modb a_forder" id="modb-1002">
                        這里是一些主要的內容
                        
    <dl>
                            
    <dt>Hello worlddt>
                            
    <dd>
                                hahaha
    dd>
                        
    dl>
                        這個實驗在沙加的神舟本上完成
                    
    div>
                    
    <div class="edit">
                        
    <id="f-1002" class="forder" href="javascript:void(0);">[收起]a> <id="unf-1002"
                            class
    ="unforder" href="javascript:void(0);">[展開]a>
                    
    div>
                
    div>


    樣式就省略了, 大家可以自己寫, 最后發兩個效果圖:

    收起時的樣子

    posted on 2010-06-10 18:01 梁良 閱讀(294) 評論(0)  編輯  收藏 所屬分類: jQuery

    <2010年6月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    導航

    公告

        歡迎光臨

    常用鏈接

    隨筆分類

    隨筆檔案

    相冊

    .我的網站.

    友情博客

    開源社區

    科技博客

    資料網站

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    Powered by:
    LonLeung
    Copyright © 梁良

    本頁生成時間:毫秒

    主站蜘蛛池模板: 亚洲Av无码国产情品久久| 色窝窝免费一区二区三区| 亚洲精品tv久久久久| 337P日本欧洲亚洲大胆精品| 尤物永久免费AV无码网站| 风间由美在线亚洲一区| 国产午夜鲁丝片AV无码免费| 成人a毛片免费视频观看| 亚洲午夜精品一级在线播放放| h视频免费高清在线观看| 亚洲精品高清无码视频| 国偷自产一区二区免费视频| 亚洲丁香色婷婷综合欲色啪| 亚洲成人免费网址| 亚洲色成人网站WWW永久四虎| 大学生一级特黄的免费大片视频 | 欧洲人免费视频网站在线| 久久亚洲伊人中字综合精品| 久久久久高潮毛片免费全部播放| 亚洲成人福利在线| 日韩午夜免费视频| 精品人妻系列无码人妻免费视频| 亚洲av鲁丝一区二区三区| 无码中文字幕av免费放| 青青视频免费在线| 亚洲高清国产拍精品26U| **实干一级毛片aa免费| 亚洲AV永久无码精品一福利| 亚洲AV蜜桃永久无码精品| a免费毛片在线播放| 亚洲Aⅴ无码专区在线观看q| 日韩精品无码区免费专区 | 亚洲综合小说另类图片动图| 四虎永久在线精品视频免费观看| A毛片毛片看免费| 亚洲人成在线中文字幕| 亚洲精品97久久中文字幕无码| 色欲A∨无码蜜臀AV免费播| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 青青免费在线视频| 久久精品九九亚洲精品|