前端開發(fā)必知的15個(gè)jQuery小技巧
下面這些簡(jiǎn)單的小技巧能夠幫助你玩轉(zhuǎn)jQuery。
1、返回頂部按鈕
通過使用jQuery中的animate 和scrollTop 方法,不用插件就可以創(chuàng)建一個(gè)滾動(dòng)到頂部的簡(jiǎn)單動(dò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 的值可以更改你想要放置滾動(dòng)條的位置。所有你真正需要做的是在800毫秒的時(shí)間內(nèi)設(shè)置文檔主體的動(dòng)畫,直到它滾動(dòng)到文檔的頂部。
注:小心scrollTop的一些錯(cuò)誤行為。
2、預(yù)加載圖像
如果你的網(wǎng)頁要使用大量開始不可見的(例如,懸停的)圖像,那么可以預(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');
3、檢查圖像是否加載
有時(shí)為了繼續(xù)腳本,你可能需要檢查圖像是否全部加載完畢:
$('img').load(function () {
console.log('image load successful');
});
你也可以用ID或類替換<img>標(biāo)簽來檢查某個(gè)特定的圖像是否被加載。
4、自動(dòng)修復(fù)破壞的圖像
逐個(gè)替換已經(jīng)破壞的圖像鏈接是非常痛苦的。不過,下面這段簡(jiǎn)單的代碼可以幫助你:
$('img').on('error', function () {
if(!$(this).hasClass('broken-image')) {
$(this).prop('src', 'img/broken.png').addClass('broken-image');
}
});
即使沒有任何斷掉的鏈接,加上這一段代碼也不會(huì)讓你有任何損失。
5、懸停切換類
假設(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這種解決方案更快,不過了解這個(gè)方法很有必要。
6、禁用輸入字段
有時(shí)候,你可能想要禁用表格的提交按鈕或它的某一項(xiàng)文字輸入直到用戶執(zhí)行了特定操作(例如,勾選“我已閱讀相關(guān)條款”復(fù)選框)。添加 disabled屬性到你的輸入就可以在你想要的時(shí)候才啟用它:
$('input[type="submit"]').prop('disabled', true);
然后你只需要運(yùn)行輸入的prop 方法就可以了,不過disabled 的值要設(shè)置為false:
$('input[type="submit"]').prop('disabled', false);
7、停止加載鏈接
有時(shí)候,你既不需要鏈接到某個(gè)特定的網(wǎng)頁,也不想要重新加載頁面——你可能希望鏈接做點(diǎn)別的事情,例如說觸發(fā)一些其他腳本。這就要在阻止默認(rèn)動(dòng)作上做文章了:
$('a.no-link').click(function (e) {
e.preventDefault();
});
8、淡入/滑動(dòng)切換
滑動(dòng)和淡入都是我們用jQuery做動(dòng)畫的時(shí)候大量運(yùn)用的東西。如果你只是想在用戶點(diǎn)擊之后展示一個(gè)元素的話,那么用fadeIn 和slideDown 方法就很完美。但是,如果你想要元素在第一次點(diǎn)擊的時(shí)候出現(xiàn),然后在第二次點(diǎn)擊的時(shí)候消失的話,那么可以試試下面的代碼:
// Fade
$('.btn').click(function () {
$('.element').fadeToggle('slow');
});
// Toggle
$('.btn').click(function () {
$('.element').slideToggle('slow');
});
9、簡(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;
});
通過添加這個(gè)腳本,你真正需要做的僅僅是在頁面上添加必要的HTML元素,這樣它就可以運(yùn)行工作了。
10、讓兩個(gè)div高度相同
有時(shí)候,你需要讓兩個(gè)div無論包含什么內(nèi)容都擁有相同的高度:
$('.div').css('min-height', $('.main-div').height());
設(shè)置 min-height,這意味著它可以比主div大但絕對(duì)不能比主div小。不過,還有一種更靈活的方法是遍歷一組元素,然后將高度設(shè)置為最高的那個(gè)元素的高度:
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、在新標(biāo)簽頁/窗口打開外部鏈接
在一個(gè)新的瀏覽器tab或窗口中打開外部鏈接,并確保同一個(gè)來源的鏈接能在同一個(gè)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中無效。修復(fù)的時(shí)候要小心這個(gè)問題。
12、通過文本查找元素
通過使用jQuery中的contains() 選擇器,你可以找到元素內(nèi)容的文本。如果文本不存在,那就隱藏該元素:
var search = $('#search').val();
$('div:not(:contains("' + search + '"))').hide();
13、在改變Visibility時(shí)觸發(fā)
當(dāng)用戶不再關(guān)注某個(gè)tab,或重新聚焦原來的那個(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!');
}
});
14、AJAX調(diào)用錯(cuò)誤處理
當(dāng)Ajax調(diào)用返回404或500錯(cuò)誤時(shí),就執(zhí)行錯(cuò)誤處理程序。如果沒有定義處理程序,其他的jQuery代碼或會(huì)就此罷工。定義一個(gè)全局的Ajax錯(cuò)誤處理程序:
$(document).ajaxError(function (e, xhr, settings, error) {
console.log(error);
});
15、鏈?zhǔn)讲寮{(diào)用
jQuery允許“鏈?zhǔn)健辈寮姆椒ㄕ{(diào)用,以減輕反復(fù)查詢DOM并創(chuàng)建多個(gè)jQuery對(duì)象的過程。比方說,下面的代碼片段代表了你的插件方法調(diào)用:
$('#elem').show();
$('#elem').html('bla');
$('#elem').otherStuff();
通過使用鏈?zhǔn)?,可以大大改善?/p>
$('#elem')
.show()
.html('bla')
.otherStuff();
還有一種方法是在(前綴$)變量中高速緩存元素:
var $elem = $('#elem');
$elem.hide();
$elem.html('bla');
$elem.otherStuff();
鏈?zhǔn)胶透咚倬彺娴姆椒ǘ际莏Query中可以讓代碼變得更短和更快的代最佳做法。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- jQuery前端開發(fā)35個(gè)小技巧
- WEB前端開發(fā)都應(yīng)知道的jquery小技巧及jquery三個(gè)簡(jiǎn)寫
- 關(guān)注jquery技巧提高jquery技能(前端開發(fā)必學(xué))
- 使用微信小程序開發(fā)前端【快速入門】
- 前端開發(fā)必須知道的JS之閉包及應(yīng)用
- 前端開發(fā)必須知道的JS之原型和繼承
- 利用Angularjs和Bootstrap前端開發(fā)案例實(shí)戰(zhàn)
- jquery圖片延遲加載 前端開發(fā)技能必備系列
- 前端開發(fā)過程中瀏覽器版本的兩種判定方法
- 手機(jī)/移動(dòng)前端開發(fā)需要注意的20個(gè)要點(diǎn)
相關(guān)文章
easyui datagrid 表格中操作欄 按鈕圖標(biāo)不顯示的解決方法
下面小編就為大家?guī)硪黄猠asyui datagrid 表格中操作欄 按鈕圖標(biāo)不顯示的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
jQuery實(shí)現(xiàn)隔行變色的方法分析(對(duì)比原生JS)
這篇文章主要介紹了jQuery實(shí)現(xiàn)隔行變色的方法,結(jié)合實(shí)例形式對(duì)比原生JS實(shí)現(xiàn)隔行變色的相關(guān)技巧,給出了2種jQuery實(shí)現(xiàn)隔行變色的方法,需要的朋友可以參考下2016-11-11
基于jquery的has()方法以及與find()方法以及filter()方法的區(qū)別詳解
本篇文章介紹了,基于jquery的has()方法以及與find()方法以及filter()方法的區(qū)別詳解需要的朋友參考下2013-04-04
jquery+css3實(shí)現(xiàn)熊貓tv導(dǎo)航代碼分享
本篇文章給大家詳細(xì)分享的是jquery+css3來寫出熊貓tv導(dǎo)航的效果,以及代碼分享,喜歡的朋友參考下。2018-02-02
Jquery中children與find之間的區(qū)別詳細(xì)解析
這篇文章主要是對(duì)Jquery中children與find之間的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-11-11

