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

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

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

    幫助IT團隊快速構建符合jt808協議部標的基于java技術的GPS和視頻平臺(2379423771@qq.com)

    JQuery的最佳實踐

    使用JQuery不僅要泛泛的去用,還要去不斷結合自己的業務的寫一些插件,才能理解JQuery API設計的風格 simple and consistent.

    1.開發插件所參考的典型模板
    //?
    //
    ?create?closure?
    //
    ?
    (function($)?{?
    //?
    //
    ?plugin?definition?
    //
    ?
    $.fn.hilight?=?function(options)?{?
    debug(
    this);?
    //?build?main?options?before?element?iteration?
    var?opts?=?$.extend({},?$.fn.hilight.defaults,?options);?
    //?iterate?and?reformat?each?matched?element?
    return?this.each(function()?{?
    $
    this?=?$(this);?
    //?build?element?specific?options?
    var?o?=?$.meta???$.extend({},?opts,?$this.data())?:?opts;?
    //?update?element?styles?
    $this.css({?
    backgroundColor:?o.background,?
    color:?o.foreground?
    }
    );?
    var?markup?=?$this.html();?
    //?call?our?format?function?
    markup?=?$.fn.hilight.format(markup);?
    $
    this.html(markup);?
    }
    );?
    }
    ;?
    //?
    //
    ?private?function?for?debugging?
    //
    ?
    function?debug($obj)?{?
    if?(window.console?&amp;&amp;?window.console.log)?
    window.console.log('hilight?selection?count:?'?
    +?$obj.size());?
    }
    ;?
    //?
    //
    ?define?and?expose?our?format?function?
    //
    ?
    $.fn.hilight.format?=?function(txt)?{?
    return?'<strong>'?+?txt?+?'</strong>';?
    }
    ;?
    //?
    //
    ?plugin?defaults?
    //
    ?
    $.fn.hilight.defaults?=?{?
    foreground:?'red',?
    background:?'yellow'?
    }
    ;?
    //?
    //
    ?end?of?closure?
    //
    ?
    }
    )(jQuery);



    2.很多人喜歡在javascript中或者在后端服務器response輸出中把html標記和數據混雜一起,然后輸出到div中,這樣非常難維護。
    ?? 比較好的做法是使用javascript模板(參加JQuery JTemplate插件):

    ????? 1)在DIV中寫入模板文件,并隱藏DIV? $("#divID").hidden()
    ????? 2) 通過DIV ID獲取模板定義,解析并綁定數據,
    ????? 3)生成html,重新寫到DIV中: $("#divID").html(templateResult);
    ????? 4)顯示DIV $("#divID").show()

    ????? 具體例子參見:
    ????? 前端工程師如何提高設計的功力(三)基于JQuery的分層設計
    ?????
    ????? 用jQuery和jTemplates插件實現客戶端分頁的表格展現?

    3.盡可能的提供默認參數,盡可能的滿足80%的需求
    ??
    ?1
    ?2var?defaults?=?{???
    ?3???length:?300,???
    ?4???minTrail:?20,???
    ?5???moreText:?"more",???
    ?6???lessText:?"less",???
    ?7???ellipsisText:?""??
    ?8??}
    ;???
    ?9?????
    10??var?options?=?$.extend(defaults,?options);??

    ?? 4.使用JQuery的selector中,盡量加上上下文限制遍歷的空間,不僅提搞速度,更重要的是避免不必要的錯誤。
    ?????? $('input, textarea, select,', this)

    ?? 5.建立一個完備的log 體系
    ??????
    jQuery.fn.log?=?function?(msg)?{
    ??????console.log(
    "%s:?%o",?msg,?this);
    ??????
    return?this;
    ??}
    ;
    $(root).find('li.source>?input:checkbox').log("sources?to?uncheck").removeAttr("checked");

    ???6.關注JQuery的自定義事件
    ?????
    jQuery中幾個自定義的事件:
    (1)hover(fn1,fn2):一個模仿懸停事件(鼠標移動到一個對象上面及移出這個對象)的方法。當鼠標移動到一個匹配的元素上面時,會觸發指定的第一個函數。當鼠標移出這個元素時,會觸發指定的第二個函數。
    //當鼠標放在表格的某行上時將class置為over,離開時置為out。
    $("tr").hover(function(){
    $(this).addClass("over");
    },
    ???????function(){
    ???????$(this).addClass("out");
    });
    (2)ready(fn):當DOM載入就緒可以查詢及操縱時綁定一個要執行的函數。
    $(document).ready(function(){})
    //頁面加載完畢提示“Load?Success”,相當于onload事件。與$(fn)等價
    (3)toggle(evenFn,oddFn):?每次點擊時切換要調用的函數。如果點擊了一個匹配的元素,則觸發指定的第一個函數,當再次點擊同一元素時,則觸發指定的第二個函數。隨后的每次點擊都重復對這兩個函數的輪番調用。
    ???????//每次點擊時輪換添加和刪除名為selected的class。
    ???????$("p").toggle(function(){
    ??????????????$(this).addClass("selected");???
    ???????},function(){
    ??????????????$(this).removeClass("selected");
    ???????});
    (4)trigger(eventtype):?在每一個匹配的元素上觸發某類事件。
    例如:
    ???????$("p").trigger("click");??????????????//觸發所有p元素的click事件
    (5)bind(eventtype,fn),unbind(eventtype):?事件的綁定與反綁定
    從每一個匹配的元素中(添加)刪除綁定的事件。
    例如:
    $("p").bind("click",?function(){.text());});???????//為每個p元素添加單擊事件
    $("p").unbind();???????//刪除所有p元素上的所有事件
    $("p").unbind("click")???????//刪除所有p元素上的單擊事件


    7.利用jQuery 內置的CSS選擇器selectors來提高效率.
    如$(":input??")? 的到頁面上所有tag 是input的Form控件。
    如果在加上[attribute=value]??就更方便了如:$(" input[name='firstName']") 是查找DOM name是firstName的Form控件.
    //下面是得到多選下拉框的所有的選擇的值,放入到map中。
    jQuery('option:selected', this).each( function() {
    ??? a.push({name: n, value: this.value});
    ??? });

    8. return flase 來阻止事件冒泡,? 如:屏蔽select下拉框的滾輪事件
    $(document).ready(function(){
    ??????? $("select").each(function(){
    ??????????? $(this).bind("mousewheel",function(){
    ??????????????? return false;
    ??????????? });
    ??????? });
    ??? });


    posted on 2008-12-11 19:33 Speed 閱讀(4600) 評論(2)  編輯  收藏 所屬分類: 前端設計JQuery

    評論

    # re: JQuery的最佳實踐 2008-12-12 10:25 舞命小丟

    很有感覺!JQuery的主要擴展方式就是插件了啊!  回復  更多評論   

    # re: JQuery的最佳實踐 2008-12-16 08:43 淘聲依舊

    學習  回復  更多評論   

    導航

    留言簿(15)

    隨筆分類

    值得一看的博客

    積分與排名

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 亚洲熟伦熟女新五十路熟妇| 亚洲无线一二三四区| 永久免费av无码网站yy| 亚洲无限乱码一二三四区| 四虎国产精品免费久久影院| 国产免费阿v精品视频网址| 亚洲国产成人久久77| 免费看国产一级片| 最近免费字幕中文大全视频| 亚洲成a人无码亚洲成www牛牛 | 久99久精品免费视频热77| 亚洲国产精品综合久久久| 亚洲第一网站男人都懂| 24小时日本电影免费看| 免费无码午夜福利片69| 亚洲无砖砖区免费| 亚洲熟妇无码乱子AV电影| 成人免费视频小说| 日韩免费的视频在线观看香蕉| 亚洲乱亚洲乱妇无码| 色婷婷六月亚洲婷婷丁香| 免费一级毛片在级播放| 无码国产精品一区二区免费式直播| 美女裸免费观看网站| 亚洲二区在线视频| 黑人精品videos亚洲人| 免费夜色污私人影院在线观看| 0588影视手机免费看片| 三年片免费观看大全国语| 免费人成毛片动漫在线播放| 亚洲精品动漫免费二区| 亚洲视频一区在线播放| 国产精品亚洲аv无码播放| 在线观着免费观看国产黄| 99久久国产热无码精品免费| 暖暖日本免费中文字幕| 国产精品视频全国免费观看| 亚洲阿v天堂在线| 亚洲Av无码乱码在线观看性色| 手机看黄av免费网址| 久久aa毛片免费播放嗯啊|