JQuery.data()方法

Jquery提供的在节点存取数据的方法。

var $el = $('#app');
//使用键值对的方式存数据
$el.data('name', 'jinx');
$el.data('age', '19');
//也可以使用对象同时存储
$el.data({
name: 'jinx',
age: '19'
}); //获取存到节点的全部数据
$el.data();
//按照键获取
$el.data('name'); //移除添加的数据
$el.removeData();
$el.removeData('age');

JQuery.extend()方法

Jquery提供的对象拼接方法:

$.extend( [deep ], target, object1 [, objectN ] )

var obj1 = {
name : 'jinx',
age: 14,
info: {
hobby: 'run',
hair: 'braids'
}
}
var obj2 = {
age: 10,
sex: 0,
info: {
hobby: 'jump'
}
}
//非深度拼接
$.extend(obj1, obj2);
console.log(obj1);
/*:obj1={
name : 'jinx',
age: 10,
info: {
hobby: 'jump'
},
sex: 0
}
*/
//若是使用 $.extend(true, obj1, obj2);
//则为深度拼接:
/*:obj1={
name : 'jinx',
age: 10,
info: {
hobby: 'jump',
hair: 'braids'
},
sex: 0
}*/

注:返回值为拼接完成的目标对象。

非深度拼接时,相同键则替换值,而不同键则拼接,所以在非深度拼接的情况下修改拼接对象可能会改变其他拼接对象,因为是引用值。

观察obj1.info的变化,深度拼接则是进行深度克隆。

JQuery.data()方法

Jquery提供的在节点存取数据的方法。

var $el = $('#app');
//使用键值对的方式存数据
$el.data('name', 'jinx');
$el.data('age', '19');
//也可以使用对象同时存储
$el.data({
name: 'jinx',
age: '19'
}); //获取存到节点的全部数据
$el.data();
//按照键获取
$el.data('name'); //移除添加的数据
$el.removeData();
$el.removeData('age');

JQuery.extend()方法

Jquery提供的对象拼接方法:

$.extend( [deep ], target, object1 [, objectN ] )

var obj1 = {
name : 'jinx',
age: 14,
info: {
hobby: 'run',
hair: 'braids'
}
}
var obj2 = {
age: 10,
sex: 0,
info: {
hobby: 'jump'
}
}
//非深度拼接
$.extend(obj1, obj2);
console.log(obj1);
/*:obj1={
name : 'jinx',
age: 10,
info: {
hobby: 'jump'
},
sex: 0
}
*/
//若是使用 $.extend(true, obj1, obj2);
//则为深度拼接:
/*:obj1={
name : 'jinx',
age: 10,
info: {
hobby: 'jump',
hair: 'braids'
},
sex: 0
}*/

注:返回值为拼接完成的目标对象。

非深度拼接时,相同键则替换值,而不同键则拼接,所以在非深度拼接的情况下修改拼接对象可能会改变其他拼接对象,因为是引用值。

观察obj1.info的变化,深度拼接则是进行深度克隆。

扩展:对象的克隆和拼接(原生js)

  • 对象的克隆
//可以先将对象转为字符形式,然后再转为对象即可(需要注意的是Json.syringify对数据有长度限制)
function cloneJSON(jsonObj){
try{
return jsonObj ? JSON.parse(JSON.stringify(jsonObj)) : jsonObj;
}catch(e){
console.log(e, jsonObj);
return jsonObj;
}
}
  • 对象的拼接(jQuery.extend的源码)
jQuery.extend = jQuery.fn.extend = function() {
var options, name, src, copy, copyIsArray, clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false; // Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target; // skip the boolean and the target
target = arguments[ i ] || {};
i++;
} // Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
} // extend jQuery itself if only one argument is passed
if ( i === length ) {
target = this;
i--;
} for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
copy = options[ name ]; // Prevent never-ending loop
if ( target === copy ) {
continue;
} // Recurse if we're merging plain objects or arrays
if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && jQuery.isArray(src) ? src : []; } else {
clone = src && jQuery.isPlainObject(src) ? src : {};
} // Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
} // Return the modified object
return target;
};

jquery.data()&jquery.extend()的更多相关文章

  1. jQuery data

    大家会如何设计一个缓存呢? 一个简单的Cache (function(){ var __cache = {}, Cache = { get: function(__name){ return __ca ...

  2. html 5 data-* (dataset) 属性和 jquery data方法比较

    一些文章在介绍html 5 data-* (dataset)属性时,会提到jquery的data方法,认为data方法能够很好的利用html 5的这个特性.但实际上,二者的兼容性是很差的.下面给出一段 ...

  3. jQuery.Data源码

    jQuery.data的是jQuery的数据缓存系统.它的主要作用就是为普通对象或者DOM元素添加数据. 1 内部存储原理 这个原理很简单,原本要添加在DOM元素本身的数据,现在被集中的存储在cach ...

  4. jQuery源码解读 - 数据缓存系统:jQuery.data

    jQuery在1.2后引入jQuery.data(数据缓存系统),主要的作用是让一组自定义的数据可以DOM元素相关联——浅显的说:就是让一个对象和一组数据一对一的关联. 一组和Element相关的数据 ...

  5. 转:jQuery.data

    原文地址:http://www.it165.net/pro/html/201404/11922.html 内存泄露 首先看看什么是内存泄露,这里直接拿来Aaron中的这部分来说明什么是内存泄露,内存泄 ...

  6. JQuery data API实现代码分析

    JQuery data 接口是什么? .data() Store arbitrary data associated with the matched elements or return the v ...

  7. jQuery.data的是jQuery的数据缓存系统

    jQuery.Data源码 jQuery.data的是jQuery的数据缓存系统 jQuery.data的是jQuery的数据缓存系统.它的主要作用就是为普通对象或者DOM元素添加数据. 1 内部存储 ...

  8. 读jQuery源码 jQuery.data

    var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, rmultiDash = /([A-Z])/g; function internalData( elem, n ...

  9. jQuery.data() 与 jQuery(elem).data()源码解读

    之前一直以为 jQuery(elem).data()是在内部调用了 jQuery.data(),看了代码后发现不是.但是这两个还是需要放在一起看,因为它们内部都使用了jQuery的数据缓存机制.好吧, ...

随机推荐

  1. Nginx+Tomcat搭建高性能负载均衡集群

    一.       工具   nginx-1.8.0 apache-tomcat-6.0.33 二.    目标   实现高性能负载均衡的Tomcat集群: 三.    步骤   1.首先下载Nginx ...

  2. 读书笔记---HTML5实战 MARCO CASARIO(后六章)

    画布叠加:用CSS的z-index和position; 第八章 HTML5通信API ①XMLHTTPREQUEST是JS中用于服务器交互的API; ②用HTML5的POSTMESSAGE API实现 ...

  3. 纯CSS小三角制作

    无关的知识点 ① background-clip 属性规定背景的绘制区域. 1.padding-box:从padding区域(不含padding)开始向外裁剪背景. 2.border-box:从bor ...

  4. Quartz简单案例

    需求需要开发一个每天定时推送消息给微信用户,第一次接触quartz,简单案例 1. 先编辑要执行的任务 测试类代码 package com.wqq.test.quartz; import org.sp ...

  5. django(权限、认证)系统—— 基于Authentication backends定制

    在这篇文章中,我们进行最后关于DjangoPermission系统的探讨,来谈谈关于Permission系统后台接口和扩展后台接口的开发. Django实现的这套permission体系,在底层被抽象 ...

  6. 【gcd+stl】UVa1642 Magical GCD

    Description 一个长度为n的数列,选一个连续子序列,使得子序列的公约数*长度最大,求这个最大值.n<=1e5. Solution 连续子序列一般都要用滑动窗口是吧(固定r,快速计算最优 ...

  7. [Poi2012]A Horrible Poem BZOJ2795

    分析: 这是今天下午的考试题,推了2个小时,考试中A掉了 首先,循环串通过字符串hash可以O(1)判断:get_hash(l,r-len)==get_hash(l+len,r);显然可证. 我们其次 ...

  8. BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队

    BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无 ...

  9. Hibernate-ORM:02.Hibernate增删改入门案例

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本笔者使用的是Idea+mysql+maven做Hibernate的博客,本篇及其以后都是如此! 首先写好思路 ...

  10. Netty自定义协议解析原理与应用

    目前,大家都选择Netty做为游戏服务器框架网络通信的框架,而且目前也有很多优秀的产品是基于Netty开发的.它的稳定性,易用性和高效率性已得到广泛的认同.在游戏服务器开发中,选择netty一般就意味 ...