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

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

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

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

    JQuery的最佳實踐

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

    1.開發(fā)插件所參考的典型模板
    //?
    //
    ?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標記和數(shù)據(jù)混雜一起,然后輸出到div中,這樣非常難維護。
    ?? 比較好的做法是使用javascript模板(參加JQuery JTemplate插件):

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

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

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


    7.利用jQuery 內(nèi)置的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 閱讀(4616) 評論(2)  編輯  收藏 所屬分類: 前端設計JQuery

    評論

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

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

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

    學習  回復  更多評論   

    導航

    留言簿(15)

    隨筆分類

    值得一看的博客

    積分與排名

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 成人免费无码大片a毛片软件| 黄色片在线免费观看| 亚洲AV无码一区二区乱子伦 | 插鸡网站在线播放免费观看| 亚洲午夜国产精品无码| 七色永久性tv网站免费看| 亚洲中文字幕一二三四区苍井空 | 国产亚洲成人在线播放va| 在线免费观看国产| 亚洲高清毛片一区二区| 亚洲成AV人在线观看天堂无码| 青娱乐免费在线视频| 一级美国片免费看| 亚洲剧情在线观看| 亚洲一区日韩高清中文字幕亚洲 | a级毛片毛片免费观看久潮喷| 亚洲人精品亚洲人成在线| 亚洲女人被黑人巨大进入| 2021在线永久免费视频| 国产成人综合亚洲绿色| 亚洲综合无码一区二区三区| 亚洲第一区精品观看| 999久久久免费精品国产| 一区二区三区免费视频网站| 亚洲av乱码一区二区三区| 久久亚洲精品中文字幕三区| 日本一区二区三区日本免费| 18未年禁止免费观看| 黄色视屏在线免费播放| 亚洲精品无码久久久久秋霞 | 日本亚洲欧美色视频在线播放 | 亚洲第一视频在线观看免费| 在线亚洲高清揄拍自拍一品区| 亚洲熟女一区二区三区| 国产一级一片免费播放| 精品女同一区二区三区免费站| 中文字幕一区二区三区免费视频| 美国毛片亚洲社区在线观看| 国产v亚洲v天堂a无| 久久亚洲AV成人无码电影| 亚洲精品无码专区在线在线播放|