<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 梁良 閱讀(287) 評論(0)  編輯  收藏 所屬分類: jQuery

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

    導航

    公告

        歡迎光臨

    常用鏈接

    隨筆分類

    隨筆檔案

    相冊

    .我的網站.

    友情博客

    開源社區

    科技博客

    資料網站

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    Powered by:
    LonLeung
    Copyright © 梁良

    本頁生成時間:毫秒

    主站蜘蛛池模板: 精品一区二区三区免费毛片| 亚洲夜夜欢A∨一区二区三区 | 亚洲无成人网77777| 国产亚洲精品精华液| 日日噜噜噜噜夜夜爽亚洲精品| 亚洲精品国产自在久久| 成人亚洲综合天堂| 亚洲国产成人久久精品99| 亚洲精品国产va在线观看蜜芽| 亚洲精品亚洲人成在线观看下载| 亚洲阿v天堂在线2017免费| 亚洲精品视频久久久| 亚洲色精品88色婷婷七月丁香| 亚洲中文字幕在线观看| 亚洲国产精品无码久久久蜜芽| 国产A在亚洲线播放| 久久亚洲国产精品成人AV秋霞 | 免费在线观看a级毛片| 亚洲午夜精品第一区二区8050| 区久久AAA片69亚洲| 国产AV无码专区亚洲精品| 亚洲综合激情视频| 亚洲AV色吊丝无码| 亚洲Av永久无码精品一区二区| 特a级免费高清黄色片| a级成人毛片免费图片| 亚洲啪啪免费视频| 免费无码成人AV片在线在线播放| 无码专区一va亚洲v专区在线| 精品亚洲一区二区| 亚洲国产精品午夜电影| 黑人粗长大战亚洲女2021国产精品成人免费视频| 香蕉视频亚洲一级| 免费国产99久久久香蕉| 成人浮力影院免费看| 四虎影视大全免费入口| 国产亚洲精品久久久久秋霞| 亚洲欧洲精品在线| 怡红院亚洲红怡院在线观看| 视频免费在线观看| 男男AV纯肉无码免费播放无码 |