ラピッド プロトタイピング用に要素を複製するプラグインを作成しました。プラグインは、要素に 'data-clone' の data-attribute を持つ各要素と、属性に設定された複製量を反復処理します。
例:
<table data-clone="3">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Project</th>
</tr>
</thead>
<tbody>
<tr data-clone="4">
<td>1</td>
<td>Steve Sax</td>
<td>Something here.</td>
</tr>
</tbody>
</table>
これは最初の要素でうまくいくようです。ただし、コンテナーが複製されたネストされたアイテムがあり、内部の要素も複製されている場合。ネストされたアイテムと最初の外側を複製しているようですが、それらのネストされたアイテムを新しく複製された外側のコンテナに複製しません。
ここにフィドルがあります:フィドル
プラグインと呼び出しがあります。「実行」をクリックすると、私の言いたいことが正確にわかるはずです。
ただし、 .each() メソッドが最初にネストされたアイテムから反復され、次に上に向かって機能した場合、すべてのクローンが正しいと思います。
前もって感謝します、
アダム。
参照用のプラグイン自体は次のとおりです。繰り返しますが、すべてが同様にフィドルにあります。
/*! Adamin Clone - v0.1.0 - 2012-09-29
* https://github.com/pensive612/Adamin-Clone
* Copyright (c) 2012 Adam L.; Licensed MIT, GPL */
(function(window, document, $, undefined) {
var Project = function(elem, options) {
this.elem = elem;
this.$elem = $(elem);
this.options = options;
this.metadata = this.$elem.data('clone-cap');
};
Project.prototype = {
defaults: {
cloneCap: 100
},
init: function() {
this.config = $.extend({}, this.defaults, this.options, this.metadata);
this.getCloneValue(this.$elem);
return this;
},
getCloneValue: function(elem) {
var configCap = this.config.cloneCap;
var cloneValue = elem.data('clone');
// parse data-clone value
cloneValue = this.parseCloneValue(cloneValue);
// if data-clone value is valid, send to clone function
if ( cloneValue && (cloneValue < configCap) ) {
this.cloneItem(this.$elem, cloneValue);
// otherwise, return false
} else {
if (cloneValue > configCap) {
window.console.log('Your data-clone value is too high for the defaults. Please check documentation to override cap in config.');
}
return false;
}
},
parseCloneValue: function(value) {
var cloneValue = parseInt(value, 10);
return cloneValue;
},
cloneItem: function(elem, value) {
var elemClone;
for (var i = value; i > 0; i--) {
elemClone = elem.clone(true);
elemClone.removeAttr('data-clone');
elemClone.addClass('clone-' + i);
elemClone.insertAfter(elem);
}
}
};
Project.defaults = Project.prototype.defaults;
$.fn.adaminClone = function(options, callback) {
if (typeof callback === 'function') {
callback.call(this);
}
return this.each(function() {
new Project(this, options).init();
});
};
window.Project = Project;
}(window, document, jQuery));