前端程式設計師應該知道的 15 個 jQuery 小技巧

2015-11-18    分類:WEB開發、程式設計開發、首頁精華5人評論發表於2015-11-18

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

下面這些簡單的小技巧能夠幫助你玩轉jQuery。

  • 返回頂部按鈕
  • 預載入影像
  • 檢查影像是否載入
  • 自動修復破壞的影像
  • 懸停切換類
  • 禁用輸入欄位
  • 停止載入連結
  • 切換淡入/幻燈片
  • 簡單的手風琴
  • 讓兩個div高度相同
  • 在新標籤頁/視窗開啟外部連結
  • 通過文字查詢元素
  • 在改變Visibility時觸發
  • AJAX呼叫錯誤處理
  • 鏈式外掛呼叫

返回頂部按鈕

通過使用jQuery中的animate 和scrollTop 方法,不用外掛就可以建立一個滾動到頂部的簡單動畫:

// 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毫秒的時間內設定文件主體的動畫,直到它滾動到文件的頂部。

注:小心scrollTop的一些錯誤行為。

預載入影像

如果你的網頁要使用大量開始不可見的(例如,懸停的)影像,那麼可以預載入這些影像:

$.preloadImages = function () {
  for (var i = 0; i < arguments.length; i++) {
    $('<img>').attr('src', arguments[i]);
  }
};

$.preloadImages('img/hover-on.png', 'img/hover-off.png');

檢查影像是否載入

有時為了繼續指令碼,你可能需要檢查影像是否全部載入完畢:

$('img').load(function () {
  console.log('image load successful');
});

你也可以用ID或類替換<img>標籤來檢查某個特定的影像是否被載入。

自動修復破壞的影像

逐個替換已經破壞的影像連結是非常痛苦的。不過,下面這段簡單的程式碼可以幫助你:

$('img').on('error', function () {
  if(!$(this).hasClass('broken-image')) {
    $(this).prop('src', 'img/broken.png').addClass('broken-image');
  }
});

即使沒有任何斷掉的連結,加上這一段程式碼也不會讓你有任何損失。

懸停切換類

假設你希望當使用者將滑鼠懸停在可點選的元素上時,它會改變顏色。那麼你可以在使用者懸停的時候新增類到元素中,反之則刪除類:

$('.btn').hover(function () {
  $(this).addClass('hover');
}, function () {
  $(this).removeClass('hover');
});

你只需要新增必要的CSS即可。更簡單的方法是使用toggleClass 方法:

$('.btn').hover(function () {
  $(this).toggleClass('hover');
});

注:可能在這種情況下,CSS這種解決方案更快,不過了解這個方法很有必要。

禁用輸入欄位

有時候,你可能想要禁用表格的提交按鈕或它的某一項文字輸入直到使用者執行了特定操作(例如,勾選“我已閱讀相關條款”核取方塊)。新增 disabled屬性到你的輸入就可以在你想要的時候才啟用它:

$('input[type="submit"]').prop('disabled', true);

然後你只需要執行輸入的prop 方法就可以了,不過disabled 的值要設定為false:

$('input[type="submit"]').prop('disabled', false);

停止載入連結

有時候,你既不需要連結到某個特定的網頁,也不想要重新載入頁面——你可能希望連結做點別的事情,例如說觸發一些其他指令碼。這就要在阻止預設動作上做文章了:

$('a.no-link').click(function (e) {
  e.preventDefault();
});

淡入/滑動切換

滑動和淡入都是我們用jQuery做動畫的時候大量運用的東西。如果你只是想在使用者點選之後展示一個元素的話,那麼用fadeIn 和slideDown 方法就很完美。但是,如果你想要元素在第一次點選的時候出現,然後在第二次點選的時候消失的話,那麼可以試試下面的程式碼:

// Fade
$('.btn').click(function () {
  $('.element').fadeToggle('slow');
});

// Toggle
$('.btn').click(function () {
  $('.element').slideToggle('slow');
});

簡單的手風琴

這是一個可快速生成手風琴的簡單方法:

// 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元素,這樣它就可以執行工作了。

讓兩個div高度相同

有時候,你需要讓兩個div無論包含什麼內容都擁有相同的高度:

$('.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());
});

在新標籤頁/視窗開啟外部連結

在一個新的瀏覽器tab或視窗中開啟外部連結,並確保同一個來源的連結能在同一個tab或者視窗中開啟:

$('a[href^="http"]').attr('target', '_blank');
$('a[href^="//"]').attr('target', '_blank');
$('a[href^="' + window.location.origin + '"]').attr('target', '_self');

注意:window.location.origin 在IE10中無效。修復的時候要小心這個問題。

通過文字查詢元素

通過使用jQuery中的contains() 選擇器,你可以找到元素內容的文字。如果文字不存在,那就隱藏該元素:

var search = $('#search').val();
$('div:not(:contains("' + search + '"))').hide();

在改變Visibility時觸發

當使用者不再關注某個tab,或重新聚焦原來的那個tab上時,觸發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呼叫錯誤處理

當Ajax呼叫返回404或500錯誤時,就執行錯誤處理程式。如果沒有定義處理程式,其他的jQuery程式碼或會就此罷工。定義一個全域性的Ajax錯誤處理程式:

$(document).ajaxError(function (e, xhr, settings, error) {
  console.log(error);
});

鏈式外掛呼叫

jQuery允許“鏈式”外掛的方法呼叫,以減輕反覆查詢DOM並建立多個jQuery物件的過程。比方說,下面的程式碼片段代表了你的外掛方法呼叫:

$('#elem').show();
$('#elem').html('bla');
$('#elem').otherStuff();

通過使用鏈式,可以大大改善:

$('#elem')
  .show()
  .html('bla')
  .otherStuff();

還有一種方法是在(字首$)變數中快取記憶體元素:

var $elem = $('#elem');
$elem.hide();
$elem.html('bla');
$elem.otherStuff();

鏈式和快取記憶體的方法都是jQuery中可以讓程式碼變得更短和更快的代最佳做法。

譯文連結:http://www.codeceo.com/article/15-jquery-tips.html
英文原文:jQuery Tips Everyone Should Know
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章