我正在尝试为jQuery开发一个插件。这是我的第一个插件,我陷入了初始阶段。
我需要做以下事情:我需要从表中找到“添加行”链接并绑定到click事件。单击链接时,应通过克隆现有模板行来添加新行。最初隐藏模板行。
以下是HTML。
<table id='grid1'>
<tr>
<td><a href='#' id='add_row'>Add New Row</a></td>
</tr>
<tr>
<td>
<table id='data_table'>
<tr><th>Col1</th><th>Col2</th><th>Col3</th></tr>
<tr><td>Data1</td><td>Data2</td><td>Col3</td></tr>
<tr id='template_row'>
<td><input type='text' /></td>
<td><input type='text' /></td>
<td><input type='text' /></td>
</tr>
</table>
</td>
</tr>
</table>
到目前为止我的jQuery:
(function($) {
$.extend($.fn, {
editableGrid: function() {
function addRow() {
//code to clone here but i need the instance of main table here ie grid1
}
this.find('#add_row').bind("click",addRow);
}
});
})(jQuery);
答案 0 :(得分:3)
您需要.detach()表格中的模板并将其放在工厂变量上,例如:
var factory = $('#template_row').detach();
factory.removeAttr('id'); // Suggestion for Tomalak
它将从表中隐藏(不是真的)。下一步是绑定点击你的链接,并在这里指定将去新的factory.clone项目。像:
$('button.new-link').click(function(){
$('#data_table').append(factory.clone(true));
});
中查看
答案 1 :(得分:2)
不需要plugin
只需执行此操作:
$('#add_row').click(function(){
var clone = $('#template_row').clone();
clone.removeAttr('id');
clone.appendTo('#data_table');
})
答案 2 :(得分:2)
继续使用您当前的代码:
(function($) {
$.extend($.fn, {
editableGrid: function() {
this.find("a.add_row").click(function () {
var $table = $(this).parent("table").find("table.data_table");
var $newRow = $table.find("tr.template_row").clone();
$newRow.removeClass("template_row"); // !!!
$table.append($newRow);
return false;
});
}
});
})(jQuery);
注释
bind()
而不是使用此处click()
"a.add_row"
优于".add_row"
)this
指的是包含所有匹配元素的jQuery对象,因此click()
将所有绑定在一起 this
指的是一个单独的DOM元素(即点击的链接) - 这里不一个jQuery对象!false
函数返回click
以防止浏览器默认行为$
添加变量以表示它们包含jQuery对象是有用的答案 3 :(得分:1)
$.fn.myTableTingPlugin = function() {
var self = this;
$(self).find(".template_row").hide(); // or use css class
$(this).find(".add_row").click(function() {
// shuld probebly not use ids if its a plugin
// so i use a class here
var newRow = $(self).find(".template_row").clone();
$(self).find(".data_table").append(newRow);
});
};
答案 4 :(得分:1)
首先,不要使用id,类更好。双引号也更好。
<table class="extendableTable">
<tr>
<td><a href="#" class="extendLink">Add New Row</a></td>
</tr>
<tr>
<td>
<table id="data_table">
<tr><th>Col1</th><th>Col2</th><th>Col3</th></tr>
<tr><td>Data1</td><td>Data2</td><td>Col3</td></tr>
<tr id='template_row'>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
</tr>
</table>
</td>
</tr>
</table>
插件的源代码:
(function($) {
$.fn.extendableTable = function(options){
var table = this;
this.find('.extendLink').click(function(){
table.find('.dataTable .templateRow:first').clone().appendTo(table.find('.dataTable'));
return false;
});
}
})(jQuery);
然后你可以用这样的方式使用插件:
$('.extendableTable').extendableTable();