(译)你应该知道的jQuery技巧

帮助提升你jQuery应用的简单小技巧。javascript

  1. 回到顶部按钮
  2. 图片预加载
  3. 判断图片是否加载完
  4. 自动修补破损图像
  5. Hover切换class类
  6. 禁用输入
  7. 中止正在加载的连接
  8. toggle fade/slide
  9. 简单的手风琴
  10. 使两个DIV同等高度
  11. 在浏览器标签/新窗口打开外部连接
  12. 根据文本获取元素
  13. 可见变化的触发
  14. Ajax调用错误处理
  15. 链式操做

回到顶部按钮

利用jQuery里的animate和scrollTop方法,你便不须要使用插件建立简单的滚动到顶部动画。css

// 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毫秒中让页面滚动,直到它滚动到文档的顶部。html

备注:来看一些scrollTop的调皮行为 。java

图片预加载

若是你的网页使用了不少隐藏图片文件(例如:鼠标悬停展现的图片),那么图片的预加载是有意义的:jquery

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

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

判断图片是否加载完

有时候你可能须要检查图像是否已经加载完成,以便于能够继续执行相应的js代码:git

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

你还能够检查一个特定的图片是否加载完而且被带有Id或者class的<img>标签代替。github

自动修补破损图像

若是你碰巧发如今你的网站上发现破损的图像连接,一个个去替代他们是痛苦的。这个简单的代码能够节省不少的麻烦:ajax

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

即便你没有任何断开的连接,加入这代码也不会有任何影响。浏览器

Hover切换class类

比方说,当用户将鼠标悬停在你页面上的元素时,你想改变其视觉效果。当用户鼠标悬停在元素上,你能够在该元素上添加一个class类,当鼠标中止悬停事件时移除此class类:缓存

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

若是你想要一个更简单的方式使用toggleClass方法,则仅仅须要添加必要的CSS:

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

备注:CSS在这种状况下使用是一个快速的解决方案,但要知道这点知识依旧是值得去了解下的。

禁用输入

有时你可能须要用表单的提交按钮或者某个输入框直到用户执行了某个动做(好比:检查“我已阅读条款”复选框)。在你的输入框上设置disabled属性,而后当你须要的时候启用该属性:

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

你须要作的只是须要在输入框上再次运行prop方法,但设置的被禁用值是false:

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

中止正在加载的连接

有时你不想连接到特定的网页或者从新载入页面;你可能想让他们作一些其余事情,如触发一些其余的脚本。这是防止违约行动的技巧:

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

toggle fade/slide

滑动和淡入/淡出 是咱们在jQuery中常常大量使用的动画。你可能仅仅想在用户作某些点击事件的时候显示一个元素,这时候须要淡入/淡出或者滑动方法。可是若是你须要那个元素在你第一次点击的时候出现,在第二次点击的时候消失,代码以下:

// 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());

这个例子设置了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());
});

在浏览器标签/新窗口打开外部连接

在新的浏览器标签或窗口中打开外部连接,并确保在同一个标签或窗口中打开的是同一个源的连接:

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

可见变化的触发

当用户再也不聚焦或者从新聚焦一个标签时触发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缓存方法是最好的作法,致使更短、更快的代码。

翻译:野兽

英文原文地址:https://github.com/AllThingsSmitty/jquery-tips-everyone-should-know

相关文章
相关标签/搜索