聊一聊JQuery-深/浅克隆方法Clone()

开发 前端
克隆也可以理解为复制、拷贝和翻倍,就是从原型中产生出同样的复制品,它的外表及遗传基因与原型完全相同,但大多行为 思想不同。

克隆

克隆:是英文"clone"或"cloning"的音译;克隆是指生物体通过体细胞进行的无性繁殖,以及由无性繁殖形成的基因型完全相同的后代个体。

克隆也可以理解为复制、拷贝和翻倍,就是从原型中产生出同样的复制品,它的外表及遗传基因与原型完全相同,但大多行为 思想不同。

JQ的clone()方法名称个人感觉就是蹭热点名词;其作用就是复制。

clone()

​克隆节点是Dom的常见操作,JQ提供一个clone方法,专门用于处理dom的克隆。

clone()方法是克隆匹配的Dom元素;可以生成被选元素的副本,包含子节点,文本与属性。

clone()方法使用格式:$(selector).clone(true|false)​。

深/浅克隆的区别在于方法的参数是true(深克隆)或false(或者没有)是浅克隆。

  1. 浅克隆:只复制副本,不会克隆节点的事件。
  2. 深克隆:不止复制副本,还会复制节点的JQ事件。

页面示例代码:

<style type="text/css">
div {
border: 1px solid #000;
margin: 10px 10px;
background-color: #0095ff;
width: 200px;
height: 100px;
}
</style>
<input type="button" value="JQ浅克隆" id="c1" />
<input type="button" value="JQ深克隆" id="c2" />
<div id="dv1">
<span>用户名:</span><input type="text" />
</div>

为dv1分别注册Dom的0级/2级事件/JQ事件的单击事件;使用colone()方法克隆出新的div,在克隆的div中追加一个p元素其文本用于标示深/浅克隆的div。

深/浅克隆事件

$(function () {
//注册dom的0级单击事件
var dv1 = document.getElementById("dv1");
dv1.onclick = function () {
console.log("dom 0级事件");
};
//注册dom的2级单击事件
dv1.addEventListener("click", function () {
console.log("dom 2级事件");
});
//注册JQ的单击事件
//$("#dv1").click(function () { console.log("我是dv1"); });
$(dv1).click(function () { console.log("我是dv1"); });
//01.浅克隆 不会复制事件
//包括 0级/2级dom事件与JQ的事件 都不会被复制
$("#c1").click(function () {
//$newDiv克隆出来的新div
var $newDiv = $("#dv1").clone();
//在克隆的div追加一个p元素
//用于标示新div是浅克隆出来的
$newDiv.append('<p>浅克隆</p>');
//将克隆的div插入到$("#dv1")的后面
$newDiv.insertAfter($("#dv1"));
});

//02.深克隆 会复制事件
//注意:jq事件 会复制,
//0级/2级dom事件 不会被复制
$("#c2").click(function () {
var $newDiv = $("#dv1").clone(true);
//用于标示新div是深克隆出来的
$newDiv.append('<p>深克隆</p>');
$newDiv.insertAfter($("#dv1"));
});
});

小结

深/浅克隆的区别:

1、方法参数

  • 深克隆参数为true 浅克隆参数为false。

2、针对事件

  • 浅克隆 0级/2级/JQ事件都不会被克隆。
  • 深克隆只会克隆JQ事件,0级/2级事件也不会被克隆。
责任编辑:姜华 来源: 今日头条
相关推荐

2023-05-15 08:38:58

模板方法模式

2022-06-01 09:51:51

Golang方法接收者

2023-07-25 15:06:39

2023-09-22 17:36:37

2021-01-28 22:31:33

分组密码算法

2020-05-22 08:16:07

PONGPONXG-PON

2018-06-07 13:17:12

契约测试单元测试API测试

2021-05-12 18:02:23

方法创建线程

2021-01-29 08:32:21

数据结构数组

2022-08-08 08:25:21

Javajar 文件

2021-08-04 09:32:05

Typescript 技巧Partial

2019-02-13 14:15:59

Linux版本Fedora

2018-11-29 09:13:47

CPU中断控制器

2021-02-06 08:34:49

函数memoize文档

2022-11-01 08:46:20

责任链模式对象

2023-07-06 13:56:14

微软Skype

2020-10-15 06:56:51

MySQL排序

2020-09-08 06:54:29

Java Gradle语言

2020-06-28 09:30:37

Linux内存操作系统

2020-08-12 08:34:16

开发安全We
点赞
收藏

51CTO技术栈公众号