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. How nginx "location if" works

    Nginx's if directive does have some weirdness in practice. And people may misuse it when they do not ...

  2. Java开源生鲜电商平台-售后模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-售后模块的设计与架构(源码可下载) 说明:任何一个的电商平台都有售后服务系统,那么对于我们这个生鲜的电商平台,售后系统需要思考以下几个维度. 1. 买家的需求维度 说明:买家 ...

  3. struts2(三)---struts2中的服务端数据验证框架validate

    struts2为我们提供了一个很好的数据验证框架–validate,该框架可以很方便的实现服务端的数据验证. ActionSupport类提供了一个validate()方法,当我们需要在某一个acti ...

  4. 我们的java基础到底有多差 一个视频引发的感想

    以此文来警示自己. 大三要结束了. 我从大一下学期开始接触java,两年半了,期间有很努力的自学,也参与了一下项目,满以为自己的java基础应该不错,但今天在网上看了一个视频才发现自己学的是多么的&q ...

  5. HTML5 CSS3 专题 : 拖放 (Drag and Drop)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/31413767 本来准备写一个支持多图片拖拽上传的例子,但是为了更好的理解,先介绍 ...

  6. 关于xpath相对路径前加点与不加点的区别

    转自:https://blog.csdn.net/qingmu_9923/article/details/51771602 最近在用selenium做web工程自动化测试的相关项目,会经常用到元素定位 ...

  7. java8中stream的map和flatmap的理解

    转自https://blog.csdn.net/wynjauu/article/details/78741093 假如我们有这样一个需求给定单词列表["Hello","W ...

  8. 了解tomcat的server.xml文件

    <?xml version='1.0' encoding='utf-8'?> <!-- Note: http://201605130349.iteye.com/blog/229898 ...

  9. javaWeb使用POI操作Excel

    1.为项目添加POI POI官网链接 点进去之后下载(上边的是编译好的类,下边的是源代码) 解压文件夹,把下面三个文件复制到WebComtent>WEB-INF>lib文件夹下 再把这三个 ...

  10. APP版本更新通知流程测试要点

    一.APP版本更新通知流程图如下: 二.测试注意点: 1.Android更新直接下载APK,IOS引导至APP Store更新页面: 强制更新------只有"立即更新" 1.一般 ...