そこで、クローンされたテキストエリアと選択の値を修正するこのjQueryクローンプラグインを入手しました(テキストエリアと選択を含むクローンされた要素の値をコピーします)。
コードは次のようになります
(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
find
私の見解は
my_textareas = this.find('textarea'),
result_textareas = result.find('textarea'),
がなくても問題なく動作するはずadd(filter..)
です。
他に何かfilter
理由があるのでしょうか?