jQuery intro

Raven @ 研 A 前端, 2013-04

jQuery intro


how we can start? > javascript

webpage


   你媽知道你在這op廢文嗎?              紅的明顯~
     ∩___∩                   ∩___∩
        |ˊ ︵ ︵ˋ科     ╴--一- ╴ー     科/︵ ︵ ˋ|
       ∕  (⊙)(⊙) 科   (/"    "  )".   科(⊙)(⊙)   ˋ
       |  ( _●_) ≡   :/       ::::    ≡ (__ )   |  (扭)
╴╴╴≡    |∪| ミ    :i        ─":|   ミ﹑|∪|     ≡╴╴╴
ˋ___     ﹨ˊ  \    ˋ..:::  ij(_●    /﹨ˊ  ノ  ___ˊ
       / HTML /( (       r"  F2E    |    (  /\  CSS   \
      /     ╱   ﹀    :||      |' i。   ﹀    \       \
(扭) /    ╴/           :|:|    | |:            ╲ ╴   \
   (_    ˋ            :ˋ|   ::|  | :             ˊ   _)   (探頭)
     | / ╲ }             :,    ::( ::}              { /\ |   ∩___∩
     ∪    ()           ::|'    ::ˋ_ˊ              ()   ∪  /︵ ︵ ˋ|
                                                             (⊙)(⊙)   ˋ
                                                           ≡ (_●_ )@  |
                                     哈哈哈哈~你看看你    ミ﹑|∪|  JS

webpage

why jQuery?

jQuery: write less, do more.

jQuery operate

jQuery: selector

Sizzle.js

jQuery: selector

效率:

ID >
 tag >
  .class >
   :hover, :checked

native JS method is better:

    document.getElementById
    document.getElementsByTagName
    document.getElementsByName
    document.getElementsByClassName // gte IE9
    document.querySelectorAll(selectors) // gte IE8
    /*ps: W3 querySelector 實作與 jQuery API 不同*/
    

jQuery: selector

anti-pattern

class is good?

$('.someClass') ? $('div.someClass')

jQuery: selector - CSS-likes

selector

jQuery: selector - collection set - 1:

jQuery: selector - collection set - 2:

DOM modify

    attr, removeAttr
    prop, removeProp // valueless attribute: return boolean
    addClass, removeClass, toogleClass, hasClass

    css, width, height

    val, serialize, serializeArray

    html, text
    before, prepend, append, after
    remove, empty, clone
    wrapper, wrapperAll, wrapperInner
    

DOM modify

limit DOM Manipulation

DOM injection

DOM modify

Event -0, list

        click, dbclick, toggle
        hover, mouse[enter, down, up, leaver]
        key[down, press, up]
        blur, focus, change, select, submit, reset

        on, off, one
        ready, load, scroll, resize, unload

        triggle, triggerHandler
    

Event -1, on

        .on( events [, selector ] [, data ], handler(eventObject) );
    

Event -2, one

        function fire() {
            alert('fire in hole~');
        }
        ----------------------------------------------
        .one('click', fire);
        ===
        .on('click', function() {
            fire();
            $(this).off(event);
        });
    
fiddle - on/one

Event -3, delegate

        $(document).on('click', 'div.fire', fire);
        $('span.fire').one('click', fire);
    
fiddle - anti-delegate
fiddle - delegate
bind on document: event-performance

Event -4, namespace

        .on('click.fire', fire);
        .on('click.hi', changeTxt);

        .off('click.hi');
        .off('.hi');
    
fiddle - namespace fiddle - namespace/diff event fiddle - on: object structure

Event -5, event.data

        function greet(event) {
            alert("Hello "+event.data.name);
        }

        $("button").on("click", { name: "Karl" }, greet);
        $("button").on("click", { name: "Addy" }, greet);
    
fiddle - namespace/diff event

Event -6, others

    

other - load from CDN

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="mydomin/jquery-1.9.0.min.js"><\/script>')</script>

other - protect $

  1. noConflict

    var j = jQuery.noConflict();
        // Now, instead of $, we use j.
        j('#someDiv').hide();
        
  2. Passing jQuery(scope protect)
    (function($) {
            // Within this function, $ will always refer to jQuery
        })(jQuery);
        
  3. Passing $ via the Ready Method
    jQuery(document).ready(function($) {
            // $ refers to jQuery
        });
        

other - speedly load, delay function

other - speedly load, delay function

少用jQuery

適用,不濫用。
時間、效能、品質 是三項無法同時最佳化的
況且還有維護...

Q&A

demo

GG