阅读更多

11顶
0踩

Web前端

翻译新闻 一些实用的 jQuery 技巧

2013-04-11 17:08 by 副主编 wangguo 评论(12) 有22450人浏览
jQuery如今已经成为Web开发中最流行的JavaScript库,通过jQuery和大量的插件,你可以轻松实现各种绚丽的效果。

本文将为你介绍一些实用的技巧,希望可以帮助你更加高效地使用jQuery。

Tip 1:使用最新版本

jQuery每一个新版本都会包含一些性能优化和bug修复,为了便于升级,你可以使用Google CDN服务托管的jQuery库。有以下两种方式:

包含特定版本

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>


包含某个分支的的最新版本(此方法中jQuery版本的缓存期限只有1小时,不建议用于生产环境)

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>


Tip 2:使用简单的选择器

之前获取DOM元素通常使用jQuery的getElementById()、getElementsByTagName()和getElementsByClassName()方法。如今,所有主流浏览器都已经支持querySelectorAll(),该方法能够理解CSS查询器。你应该尝试使用这个更优的方式。

$('li[data-selected="true"] a') // 看起来不错,但是慢
$('li.selected a') // 更好的方法
$('#ElementID) // 最好


Tip 3:缓存jQuery的结果

如果你没有别的选择,只能使用DOM选择器,那么你应该缓存jQuery的结果。例如:

var selectedListItem = $('li[data-selected="true"]a')


现在,jQuery的结果已经被缓存到变量“selectedListItem”,该变量可以多次使用而不会影响性能。

Tip 4:使用jQuery扩展选择器的注意事项


jQuery提供了大量的扩展选择器,比如:visible、:hidden、:animated等,而它们不是有效的CSS3选择器。如果使用这些选择器,将不能再使用querySelectorAll()方法。为了避免这种情况,你可以先选择元素,然后再过滤。例如:

$('a.button:hidden'); //则不能使用querySelectorAll()
$('a.button').filter(':hidden'); //最佳方案


上述结果是相同的,但是第2个更快。

Tip 5:像数组一样使用jQuery对象

运行一个选择器得到的结果是一个jQuery对象。但是,通过jQuery可以使结果看起来更像一个数组,你可以定义索引元素和长度。

var buttons = $('#navigation a.button'); //Selecting all the navigation b //Selecting all the navigation buttons
// We can loop though the collection:
for(var i=0;i<buttons.length;i++){
console.log(buttons[i]); // A DOM element, not a jQuery object
}


如果你想实现更高的性能,可以使用一个简单的循环(或while语句)来代替$.each(),这样速度会比之前快几倍。

Tip 6:检查一个元素是否存在

确定一个元素集合是否存在或是否包含元素的唯一方法是检查元素的长度。

If (buttons.length){ // True only if buttons contains elements
// Do something }


Tip 7:创建jQuery空对象

创建一个新的jQuery对象有时开销会比较大。不过你可以先创建一个空对象,然后通过add()填充它。

var container = $([]);
container.add(another_element);


Tip 8:统计Web页面中DOM元素数

如果页面中包含大量元素或内容,则浏览器渲染所需的时间也更多。你可以在控制台中执行以下语句,来统计页面中的DOM元素数:

console.log($('*').length);


如果所得数值较小,则页面渲染较快。你可以通过删除多余的标记和不必要的元素来进行优化。

Tip 9:把你的代码变成jQuery插件

如果你希望将你的jQuery代码封装成一个jQuery插件,以便以后重用,你可以通过以下代码来创建:

function($){
$.fn.yourPluginName = function(){
// Your code goes here
return this;
};
})(jQuery);


Tip 10:本地存储

Local storage是一个用于在客户端上存储信息的API。使用时,你只需将你的数据作为localStorage全局对象的一个属性:

localStorage.someData = "This data is going to persist across page refreshes and browser restarts";


旧的浏览器不支持该API,不过有各种jQuery插件可以作为替代方案。这些插件在localStorage不可用时提供了其他存储方案。下面是一个例子:

// Check if "key" exists in the storage.
var value = $.jStorage.get("key");
if(!value){
// if not - load the data from the server
value = load_data_from_server();
// and save it
$.jStorage.set("key",value);


Tip 11: Live事件处理

为任何匹配选择器的元素设置一个事件处理程序,即使它在初始页面加载后被添加到DOM:

$('button.yourClassName').live('click', yourFunctionName);


这样,通过ajax或javascript加载元素时,事件处理程序会自动为这些元素进行设置:

$('button.yourClassName').die('click', yourFunctionName);


尽管与常规事件相比,live事件处理程序有一些局限性,但它还是适用于大部分情况。Live事件支持jQuery 1.3及以上版本。

Tip 12:克隆一个对象

使用.clone()方法克隆JavaScript中的DOM对象:

// Clone the DIV
var cloned = $('#yourdivID').clone();


.clone()方法无法克隆JavaScript对象。如果要克隆JavaScript对象,你可以使用下面的代码:

// Shallow copy
var newObject = jQuery.extend({}, oldObject);
// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);


Tip 13:测试隐藏元素

通过.hide()和.show()方法可以改变元素的可见性。使用下面的代码可以检测元素是否可见:

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


Tip 14:找出最近的父DIV

如果你想找出某个元素的父级DIV(无论该DIV是否有ID),那么你可以使用这个jQuery选择器:

$("#yourControl").closest("div");


英文原文:jQuery Best Practices
11
0
评论 共 12 条 请登录后发表评论
12 楼 it_boy1986 2013-04-16 15:11
刘德华,郭德纲,韩庚, 写道
live和die在1.7后迁移到on,off了吧?http://green.21-sun.com

11 楼 it_boy1986 2013-04-16 15:10
liudehua 写道
感觉这文章好老,而且内容非常相似 - -

10 楼 it_boy1986 2013-04-16 15:09
liukai 写道
live和die在1.7后迁移到on,off了吧?123
d
9 楼 出云羲仪 2013-04-12 16:22
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>


第一行已经暴露你这文章至少有3年的年头了...
8 楼 hellostory 2013-04-12 13:17
wang4717 写道
感觉这文章好老,而且内容非常相似 - -


这篇文章就是很久之前的,ITEye彻底没落了!



7 楼 key232323 2013-04-12 13:15
Tip 13:测试隐藏元素


if($(element).is(":visible") == "true") { 

应该这么写,本来就是boolean类型,为什么何字符串比较?
if($(element).is(":visible"))

or

if($(element).is(":visible") === true)

6 楼 jinnianshilongnian 2013-04-12 12:18
wang4717 写道
感觉这文章好老,而且内容非常相似 - -

live 现在新版本都不推荐了 如1.9用on off
5 楼 linder0209 2013-04-12 10:19
链式写法就是: $().methed1().methed2()....
形如这方写法,比如$('#div1').appendTo('#div2').show().click();
4 楼 Navee 2013-04-12 09:51
liukai 写道
补充个Tip 15:用链式写法.

for example?
3 楼 wang4717 2013-04-12 09:42
感觉这文章好老,而且内容非常相似 - -
2 楼 avidmouse 2013-04-12 07:55
live和die在1.7后迁移到on,off了吧?
1 楼 liukai 2013-04-11 20:56
补充个Tip 15:用链式写法.

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • PostgreSQL树形结构的递归查询示例

    处理不确定深度的层级结构,比如组织机构,一个常用的设计是在一张表里面保存 ID 和 Parent_ID ,并且通过自联结的办法构造一颗树。这种方式对写数据的过程很友好,但是查询过程就变得相对复杂。在不引入MPTT模型的...

  • oracle树形查询本级及直属下级,oracle树形构造查询语句

    oracle树形结构查询语句语法:select *from 表名where 条件1start with 条件2connect by prior 当前表字段=级联表字段--start with与connect by prior语句完成递归记录,形成一棵树形结构,通常可以在具有层次结构的...

  • 树形结构 oracle java,MySql/Oracle树形结构查询,oracle树形

    MySql/Oracle树形结构查询,oracle树形Oracle树形结构递归查询在Oracle中,对于树形查询可以使用start with ... connect byselect * from treeTablestart with id='1' connect by id = prior parent_id;若将一个树状...

  • oracle树状排序,Oracle树状结构查询

    在扫描树结构表时,要依次访问树中的每一个节点,并且每个节点只能访问一次,其步骤如下:1:从根节点开始2:访问该节点3:判断该节点有无被访问的子节点,若有,则转向它最左侧未被访问的子节点,并执行第二步,...

  • oracle的层次结构,ORACLE中的层次结构查询

    ORACLE中的层次结构查询层次结构在现实生活中是很常见的,因此早期的数据库是层次数据库,如实的反映了这种关系。后来层次数据库被证实是非常笨重的,因此关系数据库取得了成功。但是层次结构依然存在,而在关系...

  • oracle树结构

    树形机构递归: 向下 select orgid from t_org o start with o.orgid='' connect by prior o.orgid=o.parentid; 向上: select orgid from t_org o start with o.orgid='04772000' connect by prior o.parentid=o....

  • Oracle 实现树形结构处理

    oracle树查询的最重要的就是...在下面列述了oracle中树型查询的常用查询方式以及经常使用的与树查询相关的oracle特性函数等,在这里只涉及到一张表中的树查询方式而不涉及多表中的关联等。 1、准备测试表和测试数据

  • Oracle树结构查询

    Oracle树结构查询 start with ... connect byOracle树结构查询 start with ... connect by用法简介&sql有向图问题期待新解决方案 原文:http://blog.csdn.net/pengle/archive/2006/12/30/1469331.aspx ORACLE是一个...

  • Oracle的树状查询

    2.查询二维表来构造树状结构,一般都是根据一个对象向上查询查出它所有的祖先,根据一个对象向下查询查出它所有的子孙 树状结构的特点就是一个子只有一个父,一个父可以有多个子。那只要每一个对象知道了他的父对象...

  • mysql查询树形结构子节点_MySQL递归查询所有子节点,树形结构查询

    --表结构CREATE TABLE `address` (`id` int(11) NOT NULL AUTO_INCREMENT,`code_value` varchar(32) DEFAULT NULL COMMENT '区域编码',`name` varchar(128) DEFAULT NULL COMMENT '区域名称',`remark` varchar(128) ...

  • Oracle树形结构的sql语句

    ORACLE提供了一种树形结构用来实现层次查询: START WITH :指定记录是根节点的条件。根节点可以有多个。 CONNECT BY :指定记录之间是父节点和子节点关系的条件。查找出含有子节点的父节点的条件 PRIOR :指定父...

  • oracle 查询优化

    oracle查询优化(一) 1、IN 操作符 用 IN 写出来的 SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。 但是用 IN 的 SQL 性能总是比较低的,从 ORACLE 执行的步骤来分析用 IN 的 SQL 与不用 IN 的...

  • ORACLE - 树结构查询

    &lt;!--google_ad_client = "pub-1926348199765453";/* 336x280, 创建于 09-3-10 */google_ad_slot = "2470758040";google_ad_width = 336;...// --&gt;如果看到下面这种表结构,并想获取到他们之间的树机构关系

  • MySQL树状结构表查询通解

    通解MySQL中树状结构表的查询

  • Oracle 树状 父子结点 查询方法 倒叙查询

    Start With (树查询) 问题描述: 在数据库中, 有一种比较常见得 设计模式, 层级结构 设计模式, 具体到 Oracle table中, 字段特点如下: ID, DSC, PID; 三个字段, 分别表示 当前标识的 ID(主键), DSC 当前标识的...

  • oracle空间查询定义,ORACLE SDO_GEOMETRY 空间数据创建查询

    一、Oracle Spatial简介Oracle 支持自定义的数据类型,可以用数组,结构体或者带有构造函数,功能函数的类来定义自己的对象类型。这样的对象类型可以用于属性列的数据类型,也可以用来创建对象表。而Oracle Spatial...

  • oracle b树索引原理,Oracle索引原理精简总结

    尝试用最少的字数介绍oracle的几种常用索引原理,主要是想简单分析其存储结构来说明其检索方式,和解释为什们某种索引使用与某种场合。(数据结构中最简单的ArrayList和LinkedList的使用场景)。阐述原因只有一个,...

  • 树查询,递归查询,子节点查询整理

    111,121,122 mysql树查询,很不错 的函数实现 https://blog.csdn.net/qq_34997906/article/details/94007556 关于树结构 此类结构的数据,通常需要表结构中含有id 、parentId等自关联字段,有时为了提高查询效率还...

  • PostgreSQL树形结构的递归查询

    处理不确定深度的层级结构,比如组织机构,一个常用的设计是在一张表里面保存 ID 和 Parent_ID ,并且通过自联结的办法构造一颗树。这种方式对写数据的过程很友好,但是查询过程就变得相对复杂。在不引入MPTT模型的...

  • 【前端素材】大数据-设备环境监测平台.zip

    大数据技术指的是用于处理和分析大规模数据集的技术和工具。以下是一些常见的大数据技术和工具: Hadoop:Apache Hadoop是一个用于分布式存储和处理大规模数据的开源框架。它包括Hadoop Distributed File System(HDFS)用于数据存储和MapReduce用于数据处理。 Spark:Apache Spark是一个快速、通用的集群计算系统,提供了比MapReduce更快的数据处理能力。它支持内存计算和更多复杂的数据处理流程。 NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:数据湖是一个存储结构化和非结构化数据的存储池,用于支持数据分析和机器学习应用。 机器学习:大数据技术也广泛应用于机器学习领域,支持大规模数据的模型训练和预测分析。 流式处理:针对实时数据处理需求,流式处理技术(如Apache Kafka、Apache Flink)可以实时。

Global site tag (gtag.js) - Google Analytics