所以我得到了这个 jQuery 克隆插件,它修复了克隆的 textarea 和 select 的值(复制克隆元素的值,包括 textarea 和 selects)。
代码是这样的
(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);
太棒了。然而这些行
my_textareas = this.find('textarea').add(this.filter('textarea')),
result_textareas = result.find('textarea').add(result.filter('textarea')),
我不明白的是,add
.filter('textarea')
当我们已经选择了里面this
的所有 textarea 时,为什么我们需要再次这样做find
(我们循环通过它稍后获取值)。
我的看法是
my_textareas = this.find('textarea'),
result_textareas = result.find('textarea'),
没有add(filter..)
.
filter
还有其他一些原因吗?