Javascript Jquery克隆修复程序

Javascript Jquery克隆修复程序,javascript,jquery,Javascript,Jquery,所以我得到了这个jquery克隆插件,它修复了克隆的textarea和select的值(复制克隆元素的值,包括textarea和select)。代码是这样的 (function (original) { jQuery.fn.clone = function () { var result = original.apply(this, arguments), my_textareas = this.find('textarea').add

所以我得到了这个jquery克隆插件,它修复了克隆的textarea和select的值(复制克隆元素的值,包括textarea和select)。代码是这样的

(function (original) {
    jQuery.fn.clone = function () {
    var result           = original.apply(this, arguments),
        my_textareas     = this.find('textarea').add(this.filter('textarea')),
        result_textareas = result.find('textarea').add(result.filter('textarea')),
        my_selects       = this.find('select').add(this.filter('select')),
        result_selects   = result.find('select').add(result.filter('select'));
        //console.log('this',this)
       //console.log('my',this.find('textarea').length,'rsult',this.filter('textarea'),length);

       for (var i = 0, l = my_textareas.length; i < l; ++i)          
            $(result_textareas[i]).val($(my_textareas[i]).val());
       for (var i = 0, l = my_selects.length;   i < l; ++i) 
            result_selects[i].selectedIndex = my_selects[i].selectedIndex;

       return result;
     };
  }) (jQuery.fn.clone);
我不明白的是,当我们已经用
find
选择了
this
中的所有textarea时,为什么还要再次添加
.filter('textarea')
(我们在后面循环获取值)

我的观点是

   my_textareas     = this.find('textarea'),
  result_textareas = result.find('textarea'), 
如果不添加
add(filter..)
,应该可以正常工作


由于其他原因,
filter
是否存在?

find
仅获取子元素<代码>过滤器
仅获取顶级元素

通过使用这两种方法,您可以获得集合中的
textarea
元素以及集合中元素的后代

例如:

<div class="abc">
    <textarea id="one"></textarea>
</div>
<textarea class="abc" id="two"></textarea>
我们的收藏将只包含id为“2”的
textarea
。然而,如果我们这样做:

$(".abc").filter("textarea")

我们的收藏将只包含id为“一”的
textarea
。您发布的代码同时使用了“一”和“二”。

我的猜测是因为textarea可以是集合的一部分,也可以是集合中某个元素的子元素。@KevinB..ya您猜对了rite..谢谢:)好的,这意味着。。如果我对textarea本身(作为一个集合)使用clone,那么
.filter()
此处将获得该textarea..其中,textarea就好像是在我克隆的容器中..然后
.find()
开始发挥作用。。是的。。。就是这样,对我来说是的。。因为我的收藏是一个
,而文本区就在里面,所以刚才的find是有效的。。。很好,现在有道理了。。非常感谢……)
$(".abc").find("textarea")
$(".abc").filter("textarea")