Javascript Jquery克隆修复程序
所以我得到了这个jquery克隆插件,它修复了克隆的textarea和select的值(复制克隆元素的值,包括textarea和select)。代码是这样的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
(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")