Upgrade to Pro — share decks privately, control downloads, hide ads and more …

使用 jQuery 的小技巧

使用 jQuery 的小技巧

2012-06-11

aco wang

June 15, 2012
Tweet

More Decks by aco wang

Other Decks in Programming

Transcript

  1. 儘量使用 ID Selector • jQuery中最快的 Selector 是 ID Selector –

    $(‟#someId‟) • 因為和 JavaScript 的原生函數 getElementById() 對應 • 從 ID Selector 開始繼承 – $(„#traffic_light input‟); <ul id=”traffic_light”> <li><input type=”radio” name=”light” value=”red” /> 紅色</li> <li><input type=”radio” name=”light” value=”yellow” /> 黃色</li> <li><input type=”radio” name=”light” value=”green” /> 綠色</li> </ul>
  2. Tag Selector 和 Class Selector • 第二快的選擇器是 Tag Seletor –

    $(‟head‟) • 因為和 JavaScript 的 getElementsByTagName() 對應 • 使用 Class Selector 搭配 Tag – $(„head.someClass‟) – $('div#someId‟) • 使用屬性選擇器,也可以使用 Tag 來修飾 – $('div[align=“left”]‟)
  3. 使用相關的子查詢 • 使用 children(), find(), filter() 等來進行子查詢 – $(„p‟).filter(„.highlight‟); •

    使用子查詢相對較快速,ex: $parent.find(children),其 中的 $parent 已被 cache 住 • 使用 find() 取代 context $('.testdiv', '#pageBody'); $('#pageBody').find('.testdiv');
  4. DOM

  5. 使用變數暫存 Select 後的 Object • 可以減少對 DOM 的尋訪 for (i

    = 0; i < 1000; i++) { $('.myList‟).append('This is list item' + i); } var myList = $('.myList'); for (i = 0; i < 1000; i++) { myList.append('This is list item' + i); }
  6. 減少對 DOM 直接的操作 • 直接的DOM操作速度相對較慢 var myList = $('#myList'); for

    (i=0; i<1000; i++){ myList.append('This is list item ' + i); } var myList = $('.myList'), myListItems = ''; for (i=0; i<1000; i++) { myListItems += '<li>This is list item ' + i + '</li>'; } myList.html(myListItems);
  7. 適當的使用鏈接 (Chaining) • 可以減少對 DOM Tree 的尋訪和程式碼的數量 var div =

    $(„div‟), tempDiv; tempDiv = div.filter(„:first‟); tempDiv.css(„css‟, „red‟); tempDiv.attr(„name‟, „hello‟); $(„div‟).filter(„:first‟) .css(„color‟, „red‟) .attr(„name‟, „hello‟);
  8. 將程式碼寫成 jQuery Plugin • 如果要花一定得時間去開發一段 jQuery 程式碼,可以考慮將相 關的程式碼變成 Plugin •

    能夠重用(Reuse)程式碼,並且能夠有效的組織程式碼 $(function(){ $.fn.yourPluginName = function(){ // Your code }; });
  9. 在 .css() 中傳入 Map $('button').on('click', function(){ box.css('font-size', '+=5') .css('color', 'white');

    }); $('button').on('click', function(){ box.css({ 'fontSize': '+=5', 'color': 'white' }); });
  10. 考慮未支援 JavaScript 的網頁 • 透過增加 Class 的方式將相關的元素隱藏或顯示 /* In JS

    */ $('.somthing').addClass(‟hideSomething'); /* In CSS */ .hideSomething {display:none;}