前端開發(fā)必知的15個jQuery小技巧
下面這些簡單的小技巧能夠幫助你玩轉(zhuǎn)jQuery。
1、返回頂部按鈕
通過使用jQuery中的animate 和scrollTop 方法,不用插件就可以創(chuàng)建一個滾動到頂部的簡單動畫:
// 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 的值可以更改你想要放置滾動條的位置。所有你真正需要做的是在800毫秒的時間內(nèi)設置文檔主體的動畫,直到它滾動到文檔的頂部。
注:小心scrollTop的一些錯誤行為。
2、預加載圖像
如果你的網(wǎng)頁要使用大量開始不可見的(例如,懸停的)圖像,那么可以預加載這些圖像:
$.preloadImages = function () { for (var i = 0; i < arguments.length; i++) { $('<img>').attr('src', arguments[i]); } }; $.preloadImages('img/hover-on.png', 'img/hover-off.png');
3、檢查圖像是否加載
有時為了繼續(xù)腳本,你可能需要檢查圖像是否全部加載完畢:
$('img').load(function () { console.log('image load successful'); });
你也可以用ID或類替換<img>標簽來檢查某個特定的圖像是否被加載。
4、自動修復破壞的圖像
逐個替換已經(jīng)破壞的圖像鏈接是非常痛苦的。不過,下面這段簡單的代碼可以幫助你:
$('img').on('error', function () { if(!$(this).hasClass('broken-image')) { $(this).prop('src', 'img/broken.png').addClass('broken-image'); } });
即使沒有任何斷掉的鏈接,加上這一段代碼也不會讓你有任何損失。
5、懸停切換類
假設你希望當用戶將鼠標懸停在可點擊的元素上時,它會改變顏色。那么你可以在用戶懸停的時候添加類到元素中,反之則刪除類:
$('.btn').hover(function () { $(this).addClass('hover'); }, function () { $(this).removeClass('hover'); });
你只需要添加必要的CSS即可。更簡單的方法是使用toggleClass 方法:
$('.btn').hover(function () { $(this).toggleClass('hover'); });
注:可能在這種情況下,CSS這種解決方案更快,不過了解這個方法很有必要。
6、禁用輸入字段
有時候,你可能想要禁用表格的提交按鈕或它的某一項文字輸入直到用戶執(zhí)行了特定操作(例如,勾選“我已閱讀相關條款”復選框)。添加 disabled屬性到你的輸入就可以在你想要的時候才啟用它:
$('input[type="submit"]').prop('disabled', true);
然后你只需要運行輸入的prop 方法就可以了,不過disabled 的值要設置為false:
$('input[type="submit"]').prop('disabled', false);
7、停止加載鏈接
有時候,你既不需要鏈接到某個特定的網(wǎng)頁,也不想要重新加載頁面——你可能希望鏈接做點別的事情,例如說觸發(fā)一些其他腳本。這就要在阻止默認動作上做文章了:
$('a.no-link').click(function (e) { e.preventDefault(); });
8、淡入/滑動切換
滑動和淡入都是我們用jQuery做動畫的時候大量運用的東西。如果你只是想在用戶點擊之后展示一個元素的話,那么用fadeIn 和slideDown 方法就很完美。但是,如果你想要元素在第一次點擊的時候出現(xiàn),然后在第二次點擊的時候消失的話,那么可以試試下面的代碼:
// Fade $('.btn').click(function () { $('.element').fadeToggle('slow'); }); // Toggle $('.btn').click(function () { $('.element').slideToggle('slow'); });
9、簡單的手風琴
這是一個可快速生成手風琴的簡單方法:
// 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; });
通過添加這個腳本,你真正需要做的僅僅是在頁面上添加必要的HTML元素,這樣它就可以運行工作了。
10、讓兩個div高度相同
有時候,你需要讓兩個div無論包含什么內(nèi)容都擁有相同的高度:
$('.div').css('min-height', $('.main-div').height());
設置 min-height,這意味著它可以比主div大但絕對不能比主div小。不過,還有一種更靈活的方法是遍歷一組元素,然后將高度設置為最高的那個元素的高度:
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()); });
11、在新標簽頁/窗口打開外部鏈接
在一個新的瀏覽器tab或窗口中打開外部鏈接,并確保同一個來源的鏈接能在同一個tab或者窗口中打開:
$('a[href^="http"]').attr('target', '_blank'); $('a[href^="http://"]').attr('target', '_blank'); $('a[href^="' + window.location.origin + '"]').attr('target', '_self');
注意:window.location.origin 在IE10中無效。修復的時候要小心這個問題。
12、通過文本查找元素
通過使用jQuery中的contains() 選擇器,你可以找到元素內(nèi)容的文本。如果文本不存在,那就隱藏該元素:
var search = $('#search').val(); $('div:not(:contains("' + search + '"))').hide();
13、在改變Visibility時觸發(fā)
當用戶不再關注某個tab,或重新聚焦原來的那個tab上時,觸發(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!'); } });
14、AJAX調(diào)用錯誤處理
當Ajax調(diào)用返回404或500錯誤時,就執(zhí)行錯誤處理程序。如果沒有定義處理程序,其他的jQuery代碼或會就此罷工。定義一個全局的Ajax錯誤處理程序:
$(document).ajaxError(function (e, xhr, settings, error) { console.log(error); });
15、鏈式插件調(diào)用
jQuery允許“鏈式”插件的方法調(diào)用,以減輕反復查詢DOM并創(chuàng)建多個jQuery對象的過程。比方說,下面的代碼片段代表了你的插件方法調(diào)用:
$('#elem').show(); $('#elem').html('bla'); $('#elem').otherStuff();
通過使用鏈式,可以大大改善:
$('#elem') .show() .html('bla') .otherStuff();
還有一種方法是在(前綴$)變量中高速緩存元素:
var $elem = $('#elem'); $elem.hide(); $elem.html('bla'); $elem.otherStuff();
鏈式和高速緩存的方法都是jQuery中可以讓代碼變得更短和更快的代最佳做法。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關文章
jQuery dateRangePicker插件使用方法詳解
這篇文章主要為大家詳細介紹了jQuery dateRangePicker插件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07精選的10款用于構(gòu)建良好易用性網(wǎng)站的jQuery插件
這篇隨筆收集了10款非常給力的jquery 插件,幫助你構(gòu)建易用性良好的網(wǎng)站,希望對你有用!2011-01-01jQuery實現(xiàn)的導航動畫效果(附demo源碼)
這篇文章主要介紹了jQuery實現(xiàn)的導航動畫效果,可實現(xiàn)導航條的底部橫條隨鼠標移動的效果,涉及jQuery針對鼠標事件的響應及頁面元素樣式動態(tài)變換的相關技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-04-04jquery中使用$(#form).submit()重寫提交表單無效原因分析及解決
jqeury的validationEngine做ajax校驗,當表單中的最后一個字段需要做ajax驗證,在字段輸入完畢后點擊回車提交表單時不起作用,接下來為大家介紹下解決方法感興趣的各位可以參考下哈2013-03-03js判斷checkbox是否選中個數(shù)的方法(超簡單)
下面小編就為大家?guī)硪黄猨s判斷checkbox是否選中個數(shù)的方法(超簡單)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08