60个很实用的jQuery代码开发技巧收集


Posted in Javascript onDecember 15, 2014

由于内容比较多建议用CTRL+F搜索

偶然在网上看到这些不错的jQuery代码开发技巧。原文收集了30个,另外查找的时候发现了还有20个。加上另外十个实用的jQuery代码片段,共60个代码技巧,收集在一起分享给大家。

60个很实用的jQuery代码开发技巧收集

1. 创建一个嵌套的过滤器

.filter(":not(:has(.selected))") //去掉所有不包含class为.selected的元素

2. 重用你的元素查询

var allItems = $("div.item"); 
var keepList = $("div#container1 div.item"); 
<div>class names: 
$(formToLookAt + " input:checked").each(function() {  keepListkeepList = keepList.filter("." + $(this).attr("name")); });
</div>

3. 使用has()来判断一个元素是否包含特定的class或者元素

//jQuery 1.4.* includes support for the has method. This method will find 
//if a an element contains a certain other element class or whatever it is 
//you are looking for and do anything you want to them. 
$("input").has(".email").addClass("email_icon");

4. 使用jQuery切换样式

//Look for the media-type you wish to switch then set the href to your new style sheet 
$('link[media='screen']').attr('href', 'Alternative.css');

5. 限制选择的区域

//Where possible, pre-fix your class names with a tag name 
//so that jQuery doesn't have to spend more time searching 
//for the element you're after. Also remember that anything 
//you can do to be more specific about where the element is 
//on your page will cut down on execution/search times 
var in_stock = $('#shopping_cart_items input.is_in_stock');
<ul id="shopping_cart_items"> 
<li> 
<input value="Item-X" name="item" class="is_in_stock" type="radio"> Item X</li> 
<li> 
<input value="Item-Y" name="item" class="3-5_days" type="radio"> Item Y</li> 
<li> 
<input value="Item-Z" name="item" class="unknown" type="radio"> Item Z</li> 
</ul>

6. 如何正确使用ToggleClass

//Toggle class allows you to add or remove a class 
//from an element depending on the presence of that 
//class. Where some developers would use: 
a.hasClass('blueButton') ? a.removeClass('blueButton') : a.addClass('blueButton'); 
//toggleClass allows you to easily do this using 
a.toggleClass('blueButton');

7. 设置IE指定的功能

if ($.browser.msie) { // Internet Explorer is a sadist. }

8. 使用jQuery来替换一个元素

$('#thatdiv').replaceWith('fnuh');

9. 验证一个元素是否为空

if ($('#keks').html()) { //Nothing found ;}

10. 在无序的set中查找一个元素的索引

$("ul > li").click(function () { 
 var index = $(this).prevAll().length; 
});

11. 绑定一个函数到一个事件

$('#foo').bind('click', function() { 
 alert('User clicked on "foo."'); 
});

12. 添加HTML到一个元素

$('#lal').append('sometext');

13. 创建元素时使用对象来定义属性

var e = $("", { href: "#", class: "a-class another-class", title: "..." });

14. 使用过滤器过滤多属性

//This precision-based approached can be useful when you use 
//lots of similar input elements which have different types 
var elements = $('#someid input[type=sometype][value=somevalue]').get();

15. 使用jQuery预加载图片

jQuery.preloadImages = function() { for(var i = 0; i').attr('src', arguments[i]); } }; 
// Usage $.preloadImages('image1.gif', '/path/to/image2.png', 'some/image3.jpg');

16. 设置任何匹配一个选择器的事件处理程序

$('button.someClass').live('click', someFunction);
 //Note that in jQuery 1.4.2, the delegate and undelegate options have been
 //introduced to replace live as they offer better support for context
 //For example, in terms of a table where before you would use..
 // .live()
 $("table").each(function(){
 $("td", this).live("hover", function(){
 $(this).toggleClass("hover");
 });
 });
 //Now use..
 $("table").delegate("td", "hover", function(){
 $(this).toggleClass("hover");
});

17. 找到被选择到的选项(option)元素

$('#someElement').find('option:selected');

18. 隐藏包含特定值的元素

$("p.value:contains('thetextvalue')").hide();

19. 自动的滚动到页面特定区域

jQuery.fn.autoscroll = function(selector) {
 $('html,body').animate(
 {scrollTop: $(selector).offset().top},
 500
 );
}
//Then to scroll to the class/area you wish to get to like this:
$('.area_name').autoscroll();

20. 检测各种浏览器

Detect Safari (if( $.browser.safari)),
Detect IE6 and over (if ($.browser.msie && $.browser.version > 6 )),
Detect IE6 and below (if ($.browser.msie && $.browser.version <= 6 )),
Detect FireFox 2 and above (if ($.browser.mozilla && $.browser.version >= '1.8' ))

21. 替换字符串中的单词

var el = $('#id');
el.html(el.html().replace(/word/ig, ''));

22. 关闭右键的菜单

$(document).bind('contextmenu',function(e){ return false; });

23. 定义一个定制的选择器

$.expr[':'].mycustomselector = function(element, index, meta, stack){
// element- is a DOM element
// index - the current loop index in stack
// meta - meta data about your selector
// stack - stack of all elements to loop
// Return true to include current element
// Return false to explude current element
};
// Custom Selector usage:
$('.someClasses:test').doSomething();

24. 判断一个元素是否存在

if ($('#someDiv').length) {//hooray!!! it exists...}

25. 使用jQuery判断鼠标的左右键点击

$("#someelement").live('click', function(e) {
 if( (!$.browser.msie && e.button == 0) || ($.browser.msie && e.button == 1) ) {
  alert("Left Mouse Button Clicked");
 }
 else if(e.button == 2)
  alert("Right Mouse Button Clicked");
});

26. 显示或者删除输入框的缺省值

//This snippet will show you how to keep a default value
//in a text input field for when a user hasn't entered in
//a value to replace it
swap_val = [];
$(".swap").each(function(i){
 swap_val[i] = $(this).val();
 $(this).focusin(function(){
  if ($(this).val() == swap_val[i]) {
   $(this).val("");
  }
 }).focusout(function(){
  if ($.trim($(this).val()) == "") {
   $(this).val(swap_val[i]);
  }
 });
});
<INPUT class=swap value="Enter Username here.." type=text>

27. 指定时间后自动隐藏或者关闭元素(1.4支持)

//Here's how we used to do it in 1.3.2 using setTimeout
setTimeout(function() {
 $('.mydiv').hide('blind', {}, 500)
}, 5000);
//And here's how you can do it with 1.4 using the delay() feature (this is a lot like sleep)
$(".mydiv").delay(5000).hide('blind', {}, 500);

28. 动态创建元素到DOM

var newgbin1Div = $('');
newgbin1Div.attr('id','gbin1.com').appendTo('body');

29. 限制textarea的字符数量

jQuery.fn.maxLength = function(max){
 this.each(function(){
 var type = this.tagName.toLowerCase();
 var inputType = this.type? this.type.toLowerCase() : null;
 if(type == "input" && inputType == "text" || inputType == "password"){
  //Apply the standard maxLength
  this.maxLength = max;
 }
 else if(type == "textarea"){
  this.onkeypress = function(e){
  var ob = e || event;
  var keyCode = ob.keyCode;
  var hasSelection = document.selection? document.selection.createRange().text.length > 0 : this.selectionStart != this.selectionEnd;
  return !(this.value.length >= max && (keyCode > 50 || keyCode == 32 || keyCode == 0 || keyCode == 13) && !ob.ctrlKey && !ob.altKey && !hasSelection);
  };
  this.onkeyup = function(){
  if(this.value.length > max){
   this.value = this.value.substring(0,max);
  }
  };
 }
 });
};
//Usage:
$('#gbin1textarea').maxLength(500);

30. 为函数创建一个基本测试用例

//Separate tests into modules.
module("Module B");
test("some other gbin1.com test", function() {
 //Specify how many assertions are expected to run within a test.
 expect(2);
 //A comparison assertion, equivalent to JUnit's assertEquals.
 equals( true, false, "failing test" );
 equals( true, true, "passing test" );
});

31. 使用jQuery克隆元素

var cloned = $('#gbin1div').clone();

32. 测试一个元素在jQuery中是否可见

if($(element).is(':visible') == 'true') { //The element is Visible }

33. 元素屏幕居中

jQuery.fn.center = function () {
 this.css('position','absolute');
 this.css('top', ( $(window).height() - this.height() ) / +$(window).scrollTop() + 'px');
 this.css('left', ( $(window).width() - this.width() ) / 2+$(window).scrollLeft() + 'px');return this;
}
//Use the above function as: $('#gbin1div').center();

34. 使用特定名字的元素对应的值生成一个数组

var arrInputValues = new Array();
$("input[name='table[]']").each(function(){
  arrInputValues.push($(this).val());
});

35. 剔除元素中的HTML

(function($) {
 $.fn.stripHtml = function() {
  var regexp = /<("[^"]*"|'[^']*'|[^'">])*>/gi;
  this.each(function() {
   $(this).html(
    $(this).html().replace(regexp,"")
   );
  });
  return $(this);
 }
})(jQuery);
//usage:
$('p').stripHtml();

36. 使用closest来得到父元素

$('#searchBox').closest('div');

37. 使用firebug来记录jQuery事件

// Allows chainable logging
// Usage: $('#someDiv').hide().log('div hidden').addClass('someClass');
jQuery.log = jQuery.fn.log = function (msg) {
  if (console){
   console.log("%s: %o", msg, this);
  }
  return this;
};

38. 点击链接强制弹出新窗口

jQuery('a.popup').live('click', function(){
 newwindow=window.open($(this).attr('href'),'','height=200,width=150');
 if (window.focus) {newwindow.focus()}
 return false;
});

39. 点击链接强制打开新标签页

jQuery('a.newTab').live('click', function(){
 newwindow=window.open($(this).href);
 jQuery(this).target = "_blank";
 return false;
});

40. 使用siblings()来处理同类元素

// Rather than doing this
$('#nav li').click(function(){
 $('#nav li').removeClass('active');
 $(this).addClass('active');
});
// Do this instead
$('#nav li').click(function(){
 $(this).addClass('active')
  .siblings().removeClass('active');
});

41. 选择或者不选页面上全部复选框

var tog = false; // or true if they are checked on load
$('a').click(function() {
 $("input[type=checkbox]").attr("checked",!tog);
 tog = !tog;
});

42. 基于输入文字过滤页面元素

//If the value of the element matches that of the entered text
//it will be returned
$('.gbin1Class').filter(function() {
 return $(this).attr('value') == $('input#gbin1Id').val() ;
 })

43. 取得鼠标的X和Y坐标

$(document).mousemove(function(e){
$(document).ready(function() {
$().mousemove(function(e){
$('#XY').html("Gbin1 X Axis : " + e.pageX + " | Gbin1 Y Axis " + e.pageY);
});
});

44. 使得整个列表元素(LI)可点击

$("ul li").click(function(){
 window.location=$(this).find("a").attr("href"); return false;
});
<UL>
<LI><A href="#">GBin1 Link 1</A></LI>
<LI><A href="#">GBin1 Link 2</A></LI>
<LI><A href="#">GBin1 Link 3</A></LI>
<LI><A href="#">GBin1 Link 4</A></LI>
</UL>

45. 使用jQuery来解析XML

function parseXml(xml) {
 //find every Tutorial and print the author
 $(xml).find("Tutorial").each(function()
 {
 $("#output").append($(this).attr("author") + "");
 });
}

46. 判断一个图片是否加载完全

$('#theGBin1Image').attr('src', 'image.jpg').load(function() {
alert('This Image Has Been Loaded');
});

47. 使用jQuery命名事件

//Events can be namespaced like this
$('input').bind('blur.validation', function(e){
 // ...
});
//The data method also accept namespaces
$('input').data('validation.isValid', true);

48. 判断cookie是否激活或者关闭

var dt = new Date();
dt.setSeconds(dt.getSeconds() + 60);
document.cookie = "cookietest=1; expires=" + dt.toGMTString();
var cookiesEnabled = document.cookie.indexOf("cookietest=") != -1;
if(!cookiesEnabled)
{
 //cookies have not been enabled
}

49. 强制过期cookie

var date = new Date();
date.setTime(date.getTime() + (x * 60 * 1000));
$.cookie('example', 'foo', { expires: date });

50. 使用一个可点击的链接替换页面中所有URL

$.fn.replaceUrl = function() {
  var regexp = /((ftp|http|https)://(w+:{0,1}w*@)?(S+)(:[0-9]+)?(/|/([w#!:.?+=&%@!-/]))?)/gi;
  this.each(function() {
   $(this).html(
    $(this).html().replace(regexp,'<A href="$1">$1</A>')
   );
  });
  return $(this);
 }
//usage
$('#GBin1div').replaceUrl();

51: 在表单中禁用“回车键”

大家可能在表单的操作中需要防止用户意外的提交表单,那么下面这段代码肯定非常有帮助:

$("#form").keypress(function(e) {
 if (e.which == 13) {
 return false;
 }
});

52: 清除所有的表单数据

可能针对不同的表单形式,你需要调用不同类型的清楚方法,不过使用下面这个现成方法,绝对能让你省不少功夫。

function clearForm(form) {
 // iterate over all of the inputs for the form
 // element that was passed in
 $(':input', form).each(function() {
 var type = this.type;
 var tag = this.tagName.toLowerCase(); // normalize case
 // it's ok to reset the value attr of text inputs,
 // password inputs, and textareas
 if (type == 'text' || type == 'password' || tag == 'textarea')
  this.value = "";
 // checkboxes and radios need to have their checked state cleared
 // but should *not* have their 'value' changed
 else if (type == 'checkbox' || type == 'radio')
  this.checked = false;
 // select elements need to have their 'selectedIndex' property set to -1
 // (this works for both single and multiple select elements)
 else if (tag == 'select')
  this.selectedIndex = -1;
 });
};

53: 将表单中的按钮禁用

下面的代码对于ajax操作非常有用,你可以有效的避免用户多次提交数据,个人也经常使用:

禁用按钮:

$("#somebutton").attr("disabled", true);

启动按钮:

$("#submit-button").removeAttr("disabled");

可能大家往往会使用.attr(‘disabled',false);,不过这是不正确的调用。

54: 输入内容后启用递交按钮

这个代码和上面类似,都属于帮助用户控制表单递交按钮。使用这段代码后,递交按钮只有在用户输入指定内容后才可以启动。

$('#username').keyup(function() {
 $('#submit').attr('disabled', !$('#username').val()); 
});

55: 禁止多次递交表单

多次递交表单对于web应用来说是个比较头疼的问题,下面的代码能够很好的帮助你解决这个问题:

$(document).ready(function() {
 $('form').submit(function() {
 if(typeof jQuery.data(this, "disabledOnSubmit") == 'undefined') {
  jQuery.data(this, "disabledOnSubmit", { submited: true });
  $('input[type=submit], input[type=button]', this).each(function() {
  $(this).attr("disabled", "disabled");
  });
  return true;
 }
 else
 {
  return false;
 }
 });
});

56: 高亮显示目前聚焦的输入框标示

有时候你需要提示用户目前操作的输入框,你可以使用下面代码高亮显示标示:

$("form :input").focus(function() {
 $("label[for='" + this.id + "']").addClass("labelfocus");
}).blur(function() {
 $("label").removeClass("labelfocus");
});

57: 动态方式添加表单元素

这个方法可以帮助你动态的添加表单中的元素,比如,input等:

//change event on password1 field to prompt new input
$('#password1').change(function() {
  //dynamically create new input and insert after password1
  $("#password1").append("<input type='text' name='password2' id='password2' />");
});

58: 自动将数据导入selectbox中

下面代码能够使用ajax数据自动生成选择框的内容

$(function(){
 $("select#ctlJob").change(function(){
 $.getJSON("/select.php",{id: $(this).val(), ajax: 'true'}, function(j){
  var options = '';
  for (var i = 0; i < j.length; i++) {
  options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
  }
  $("select#ctlPerson").html(options);
 })
 })
})

59: 判断一个复选框是否被选中

代码很简单,如下:

$('#checkBox').attr('checked');

60: 使用代码来递交表单

代码很简单,如下:

$("#myform").submit();
Javascript 相关文章推荐
JavaScript方法和技巧大全
Dec 27 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
Jun 20 Javascript
JavaScript常用对象的方法和属性小结
Jan 24 Javascript
js函数内变量的作用域分析
Jan 12 Javascript
Javascript实现计算个人所得税
May 10 Javascript
javascript实现十秒钟后注册按钮可点击的方法
May 13 Javascript
微信小程序 触控事件详细介绍
Oct 17 Javascript
jQuery实现对网页节点的增删改查功能示例
Sep 18 jQuery
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
May 08 Javascript
Vue中CSS动画原理的实现
Feb 13 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 Javascript
node中socket.io的事件使用详解
Dec 15 #Javascript
node.js中使用socket.io的方法
Dec 15 #Javascript
Lua表达式和控制结构学习笔记
Dec 15 #Javascript
如何在node的express中使用socket.io
Dec 15 #Javascript
node.js中使用socket.io制作命名空间
Dec 15 #Javascript
node.js中的fs.fstatSync方法使用说明
Dec 15 #Javascript
node.js中的fs.fstat方法使用说明
Dec 15 #Javascript
You might like
PHP 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
python操作MongoDB基础知识
2013/11/01 Python
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
介绍一下Ruby的多线程处理
2013/02/01 面试题
音乐表演专业毕业生求职信
2013/10/14 职场文书
安全责任书范本
2014/04/15 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
母亲节寄语大全
2015/02/27 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
高温慰问简报
2015/07/21 职场文书
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL