Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';.clone()和.html()之间的区别是什么?_Javascript_Jquery - Fatal编程技术网

Javascript 什么';.clone()和.html()之间的区别是什么?

Javascript 什么';.clone()和.html()之间的区别是什么?,javascript,jquery,Javascript,Jquery,Jquery的.clone()和.html()函数之间有什么区别 Jquery文档说明: .clone()方法执行匹配数据集的深度复制 元素,这意味着它复制匹配的元素以及所有 它们的子元素和文本节点 在HTML文档中,.HTML()可用于获取任何 元素。如果选择器表达式匹配多个元素, 只有第一个匹配项才会返回其HTML内容 在我看来,这些似乎是可以互换的,因此是否存在一个将用于另一个的特定情况?.clone()返回jQuery对象,而.html()返回字符串。 如果需要jQuery对象的副本,请

Jquery的.clone()和.html()函数之间有什么区别

Jquery文档说明:

.clone()方法执行匹配数据集的深度复制 元素,这意味着它复制匹配的元素以及所有 它们的子元素和文本节点

在HTML文档中,.HTML()可用于获取任何 元素。如果选择器表达式匹配多个元素, 只有第一个匹配项才会返回其HTML内容

在我看来,这些似乎是可以互换的,因此是否存在一个将用于另一个的特定情况?

.clone()
返回jQuery对象,而
.html()
返回字符串。

如果需要jQuery对象的副本,请使用
.clone()
,并使用
.html()
以字符串格式获取jQuery对象的内部html。每个方法都有自己的目的()

另外,正如所指出的,“
.clone()
对选择器找到的元素集执行深度复制,而
.html()
仅[使用]匹配的第一个元素。”*


*但是请注意,
.html(newContent)
将设置匹配元素的集的内部html


另一个注意事项:(通常)“更快”选项是在执行DOM操作()时使用字符串而不是jQuery对象。因此,如果您只需要文本内容,我建议您使用
.html()。尽管如此:每种方法都有它自己的目的。

从你上面引用的句子中,答案就在那里:

.clone()
它复制匹配的元素及其所有子元素和文本节点。表示它选择选择器中的所有元素


.html()
只选择第一个元素

以下是一个差异列表:

  • .clone
    可用于多个选定元素,而
    .html()
    仅返回第一个元素的html

  • .clone
    返回jQuery对象,而
    .html
    返回字符串

  • .clone
    可以(如果指定)保留DOM元素的任何事件和数据
    .html
    将不会显示

  • .clone
    复制选定元素及其所有子代,而
    .html
    仅获取其子代。换句话说,与DOM方法相比,
    .clone
    类似于.outerHTML,
    .html
    更类似于.innerHTML

  • clone()方法将复制与复制的DOM元素关联的数据和事件,此方法返回目标的jQuery对象。html()只是DOM的字符串表示形式,这意味着不会复制与该DOM部分相关联的任何事件/数据,此方法只返回一个字符串

    编辑#2 删除了我关于clone()与html()一样快的评论,它实际上速度较慢。在凯西·福克的评论中可以看到下面的例子。

    
    
    <div class='rating-stars'>
                    <ul id='stars'>
                        <li class='star' title='Poor' data-value='1'>
                            <i class='fa fa-star fa-fw'></i>
                        </li>
                        <li class='star' title='Fair' data-value='2'>
                            <i class='fa fa-star fa-fw'></i>
                        </li>
                        <li class='star' title='Good' data-value='3'>
                            <i class='fa fa-star fa-fw'></i>
                        </li>
                        <li class='star' title='Excellent' data-value='4'>
                            <i class='fa fa-star fa-fw'></i>
                        </li>
                        <li class='star' title='WOW!!!' data-value='5'>
                            <i class='fa fa-star fa-fw'></i>
                        </li>
                    </ul>
    </div>
    .clone() can also we used in cases where we need to use a piece of code multiple times on out html page. Say we need to include the above code to create star rating multiple times.    
    So in this case if we want this same code to be applied multiple times in out html , we can use two ways:-
    
  • .clone()也可以用于需要在html页面上多次使用一段代码的情况。假设我们需要包含上面的代码来多次创建星级。 因此,在这种情况下,如果我们希望在html中多次应用相同的代码,我们可以使用两种方法:-
    一,。var ratingStar=$('.rating stars').html()
    2.var ratingStar=$('.rating stars').clone()


    使用.clone()的优点是,应用于.rating stars中元素的所有样式都将显示为.clone()返回一个jquery对象,而.html()只返回一个没有附加样式的字符串。

    仅根据文档-“集的深度副本”与我一直坚持的“第一次匹配”.html()比较函数将相同的内容填充到两个div中。但是在我问了这个问题之后,我得到了不同的答案。clone(true)
    也可以复制处理程序,根据文档,
    clone
    对选择器找到的元素集执行深度复制(我假设在这种情况下它将返回一个jQuery对象数组),而
    html
    只返回第一个匹配元素的内容。您的JSPerf太过臃肿。尝试一个简单的测试:是的,它更臃肿,但您通常不只是单独运行.html()或.clone()。实际调用.html()的速度要快得多,但如果将其重新插入DOM,则必须重新创建DOM,这将花费相当多的时间,克隆将恢复其最初在性能上放弃的功能。不过我会在回答中注意到这一点,因为它可能应该被说明。DOM仍然必须为这两个对象“创建”——或者更准确地说,是更改。我敢打赌,插入jQuery对象要比插入innerHTML慢,但请让我做一个JSPerf,然后再与您联系。:)速度测试的目的是隔离代码的某些方面,而不是说“哦,但无论如何你都不会自己做。”;)当我吃晚饭的时候,让我再给你回电话,哈哈。Yuppers:字符串插入比jQuery对象插入更快()。当然,你可以随便玩玩;有可能有一些情况并非如此。注th