下面這些簡(jiǎn)單的小技巧能夠幫助你玩轉(zhuǎn)jQuery。
返回頂部按鈕通過(guò)使用jQuery中的 // Back to top$('.top').click(function (e) { e.preventDefault(); $('html, body').animate({scrollTop: 0}, 800);}); <!-- Create an anchor tag --><a class='top' href='#'>Back to top</a> 改變 注:小心scrollTop的一些錯(cuò)誤行為。 預(yù)加載圖像如果你的網(wǎng)頁(yè)要使用大量開(kāi)始不可見(jiàn)的(例如,懸停的)圖像,那么可以預(yù)加載這些圖像: $.preloadImages = function () { for (var i = 0; i < arguments.length; i++) { $('<img>').attr('src', arguments[i]); }};$.preloadImages('img/hover-on.png', 'img/hover-off.png'); 檢查圖像是否加載有時(shí)為了繼續(xù)腳本,你可能需要檢查圖像是否全部加載完畢: $('img').load(function () { console.log('image load successful');}); 你也可以用ID或類替換<img>標(biāo)簽來(lái)檢查某個(gè)特定的圖像是否被加載。 自動(dòng)修復(fù)破壞的圖像逐個(gè)替換已經(jīng)破壞的圖像鏈接是非常痛苦的。不過(guò),下面這段簡(jiǎn)單的代碼可以幫助你: $('img').on('error', function () { if(!$(this).hasClass('broken-image')) { $(this).prop('src', 'img/broken.png').addClass('broken-image'); }}); 即使沒(méi)有任何斷掉的鏈接,加上這一段代碼也不會(huì)讓你有任何損失。 懸停切換類假設(shè)你希望當(dāng)用戶將鼠標(biāo)懸停在可點(diǎn)擊的元素上時(shí),它會(huì)改變顏色。那么你可以在用戶懸停的時(shí)候添加類到元素中,反之則刪除類: $('.btn').hover(function () { $(this).addClass('hover');}, function () { $(this).removeClass('hover');}); 你只需要添加必要的CSS即可。更簡(jiǎn)單的方法是使用toggleClass 方法: $('.btn').hover(function () { $(this).toggleClass('hover');}); 注:可能在這種情況下,CSS這種解決方案更快,不過(guò)了解這個(gè)方法很有必要。 禁用輸入字段有時(shí)候,你可能想要禁用表格的提交按鈕或它的某一項(xiàng)文字輸入直到用戶執(zhí)行了特定操作(例如,勾選“我已閱讀相關(guān)條款”復(fù)選框)。添加 disabled屬性到你的輸入就可以在你想要的時(shí)候才啟用它: $('input[type='submit']').prop('disabled', true); 然后你只需要運(yùn)行輸入的 $('input[type='submit']').prop('disabled', false); 停止加載鏈接有時(shí)候,你既不需要鏈接到某個(gè)特定的網(wǎng)頁(yè),也不想要重新加載頁(yè)面——你可能希望鏈接做點(diǎn)別的事情,例如說(shuō)觸發(fā)一些其他腳本。這就要在阻止默認(rèn)動(dòng)作上做文章了: $('a.no-link').click(function (e) { e.preventDefault();}); 淡入/滑動(dòng)切換滑動(dòng)和淡入都是我們用jQuery做動(dòng)畫(huà)的時(shí)候大量運(yùn)用的東西。如果你只是想在用戶點(diǎn)擊之后展示一個(gè)元素的話,那么用 // Fade$('.btn').click(function () { $('.element').fadeToggle('slow');});// Toggle$('.btn').click(function () { $('.element').slideToggle('slow');}); 簡(jiǎn)單的手風(fēng)琴這是一個(gè)可快速生成手風(fēng)琴的簡(jiǎn)單方法: // Close all panels$('#accordion').find('.content').hide();// Accordion$('#accordion').find('.accordion-header').click(function () { var next = $(this).next(); next.slideToggle('fast'); $('.content').not(next).slideUp('fast'); return false;}); 通過(guò)添加這個(gè)腳本,你真正需要做的僅僅是在頁(yè)面上添加必要的HTML元素,這樣它就可以運(yùn)行工作了。 讓兩個(gè)div高度相同有時(shí)候,你需要讓兩個(gè)div無(wú)論包含什么內(nèi)容都擁有相同的高度: $('.div').css('min-height', $('.main-div').height()); 設(shè)置 var $columns = $('.column');var height = 0;$columns.each(function () { if ($(this).height() > height) { height = $(this).height(); }});$columns.height(height); 如果你希望所有列的高度相同: var $rows = $('.same-height-columns');$rows.each(function () { $(this).find('.column').height($(this).height());}); 在新標(biāo)簽頁(yè)/窗口打開(kāi)外部鏈接在一個(gè)新的瀏覽器tab或窗口中打開(kāi)外部鏈接,并確保同一個(gè)來(lái)源的鏈接能在同一個(gè)tab或者窗口中打開(kāi): $('a[href^='http']').attr('target', '_blank');$('a[href^='//']').attr('target', '_blank');$('a[href^='' + window.location.origin + '']').attr('target', '_self'); 注意:window.location.origin 在IE10中無(wú)效。修復(fù)的時(shí)候要小心這個(gè)問(wèn)題。 通過(guò)文本查找元素通過(guò)使用jQuery中的 var search = $('#search').val();$('div:not(:contains('' + search + ''))').hide(); 在改變Visibility時(shí)觸發(fā)當(dāng)用戶不再關(guān)注某個(gè)tab,或重新聚焦原來(lái)的那個(gè)tab上時(shí),觸發(fā)JavaScript: $(document).on('visibilitychange', function (e) { if (e.target.visibilityState === 'visible') { console.log('Tab is now in view!'); } else if (e.target.visibilityState === 'hidden') { console.log('Tab is now hidden!'); }}); AJAX調(diào)用錯(cuò)誤處理當(dāng)Ajax調(diào)用返回404或500錯(cuò)誤時(shí),就執(zhí)行錯(cuò)誤處理程序。如果沒(méi)有定義處理程序,其他的jQuery代碼或會(huì)就此罷工。定義一個(gè)全局的Ajax錯(cuò)誤處理程序: $(document).ajaxError(function (e, xhr, settings, error) { console.log(error);}); 鏈?zhǔn)讲寮{(diào)用jQuery允許“鏈?zhǔn)健辈寮姆椒ㄕ{(diào)用,以減輕反復(fù)查詢DOM并創(chuàng)建多個(gè)jQuery對(duì)象的過(guò)程。比方說(shuō),下面的代碼片段代表了你的插件方法調(diào)用: $('#elem').show();$('#elem').html('bla');$('#elem').otherStuff(); 通過(guò)使用鏈?zhǔn)?,可以大大改善?/p> $('#elem') .show() .html('bla') .otherStuff(); 還有一種方法是在(前綴$)變量中高速緩存元素: var $elem = $('#elem');$elem.hide();$elem.html('bla');$elem.otherStuff(); 鏈?zhǔn)胶透咚倬彺娴姆椒ǘ际莏Query中可以讓代碼變得更短和更快的代最佳做法。 |
|