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

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

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

    秋風(fēng)的蕭瑟 又見湖邊木葉飛

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

    豆瓣的jQuery使用技巧

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

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

    //注冊全局的事件監(jiān)視器.
    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"的元素執(zhí)行事件綁定, xxx-123部分用來獲取元素的ID,比如一個帖子的ID,
    //
     a_xxx  后面的部
    //
    分用來標(biāo)識應(yīng)用如 vote / review / blog 等.
    //
    綁定的事件就是 :  Bowtech.init_vote / Bowtech.init_blog 等.
    function load_event_monitor(root) {
        
    var re = /a_(\w+)///正則表達(dá)式獲取ID.
        var fns = {};
        $(
    ".j", root).each(function(i) {
            
    var m = re.exec(this.className);
            
    if (m) {
                
    var f = fns[m[1]];
                
    if (!f) //如果事件處理函數(shù)不存在則創(chuàng)建函數(shù)對象.
                    f = eval("Bowtech.init_"+m[1]); 
                    fns[m[
    1]] = f;//調(diào)用綁定函數(shù).
                }

                f 
    && f(this);
            }

        }
    );
    }

    //在文檔加載完畢后將執(zhí)行的方法(參見jquery文檔)
    //
    一般來說文檔加載的時(shí)候應(yīng)該綁定所有的事件, 但是有一種情況例外.
    //
    比如 通過Ajax方法取回來的內(nèi)容里面還含有動作按鈕的,這時(shí)需要針對這部分功能執(zhí)行綁定.
    //
    需要手動調(diào)用 load_event_monitor(element);  方法.
    $(function() {
        load_event_monitor(document);
    }
    );
    //注意這里的o對象是一個html 元素而非是一個jquery對象,所以在調(diào)用它的方法時(shí)應(yīng)該使用$(o)函數(shù)
    //
    把它轉(zhuǎn)化為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>
                        這里可以放標(biāo)題
                    
    h3>
                    
    <div class="j modb a_forder" id="modb-1002">
                        這里是一些主要的內(nèi)容
                        
    <dl>
                            
    <dt>Hello worlddt>
                            
    <dd>
                                hahaha
    dd>
                        
    dl>
                        這個實(shí)驗(yàn)在沙加的神舟本上完成
                    
    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>


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

    收起時(shí)的樣子

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

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

    導(dǎo)航

    公告

        歡迎光臨

    常用鏈接

    隨筆分類

    隨筆檔案

    相冊

    .我的網(wǎng)站.

    友情博客

    開源社區(qū)

    科技博客

    資料網(wǎng)站

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    Powered by:
    LonLeung
    Copyright © 梁良

    本頁生成時(shí)間:毫秒

    主站蜘蛛池模板: 一道本不卡免费视频| 亚洲无吗在线视频| 国产精品小视频免费无限app| 日韩成全视频观看免费观看高清| 久久夜色精品国产噜噜亚洲a| 57PAO成人国产永久免费视频| 亚洲最大福利视频网站| 99久久免费观看| 亚洲成A∨人片在线观看无码| 1a级毛片免费观看| 亚洲H在线播放在线观看H| 国拍在线精品视频免费观看 | 特级精品毛片免费观看| 无码乱人伦一区二区亚洲一| 最近高清中文字幕免费| 国产午夜亚洲精品| 亚洲精品乱码久久久久久蜜桃| 亚洲视频在线免费| 久久国产亚洲电影天堂| 国产在线jyzzjyzz免费麻豆 | 亚洲第一街区偷拍街拍| jjzz亚洲亚洲女人| 99免费精品视频| 亚洲依依成人精品| 全免费a级毛片免费看无码| 色视频在线观看免费| 亚洲理论电影在线观看| 1000部羞羞禁止免费观看视频 | 水蜜桃视频在线观看免费播放高清| 国产成A人亚洲精V品无码性色| 98精品全国免费观看视频| 亚洲综合一区无码精品| 亚洲日韩人妻第一页| 91免费国产自产地址入| 亚洲avav天堂av在线网毛片| 亚洲国产婷婷六月丁香| 皇色在线视频免费网站| 久久免费99精品国产自在现线| 亚洲国产日韩在线一区| 亚洲婷婷国产精品电影人久久| 2021精品国产品免费观看|