使<td>带有jquery append()的标记
make grid layout of <td> tags with jquery append()
我有一个对象,其中包含一些地址信息,我想将其append()
添加到HTML表中。
表格的开头是这样的:
<table class="shipping_information" border="1">
</table>
然后我把我的地址信息放到另一个表中(这里的第5行),并把那个表放到<td>
中。我正试图使其具有最大数量的<td>
(此处为2)。如果超过2,则会附加一个新的<tr>
。
function add_shipping_address_to_shipping_container(address_obj, shipping_container) {
var append_to_table = "";
var table = shipping_container.find('table.shipping_information');
var max_td = 2;
var formatted_address = format_address(address_obj); //returns a table with the address
//are there any rows in the table
var is_tr = table.find('tr.shipping_address_container_table').length;
if (!is_tr) {
//no tr so append tr and td
//colspan should be max_td
append_to_table = "<tr class='add_container'><td class='add_container'>" + formatted_address +"</td></tr>"
} else {
//there is a tr
var last_tr = table.find('tr.add_container:last');
//number of tds in the last row
var num_td = last_tr.find('td.add_container').length;
if (num_td >= max_td) {
append_to_table = "<tr class='add_container'><td class='add_container'>" + formatted_address + "</td></tr>";
} else {
append_to_table = "<td class='add_container'>" + formatted_address + "</td>";
}
}
table.append(append_to_table);
}
然而,<td>
并没有像我想象的那样追加。它每次生成一个新的<tr>
。当我打印变量append_to_table to the console
时,它看起来是正确的。当应该有<tr><td></td></tr>
时,当应该是<td></td>
时。jquery或chrome是否每次都会自动附加一个新的<tbody>
?
jsbin
当您检查新行时,您正在搜索类shipping_address_container_table
,但当您创建新行时。您只添加了一个类为add_container
的tr。
除了第一部分(!is_tr
始终==true
)之外,您当前的代码没有执行任何操作。这可能是你的问题。
此外,我将现有tr
元素的追加移到了tr
而不是table
,以确保jquery不会自动将td
包装到新的tr
中。
这对我有效:
function add_shipping_address_to_shipping_container(address_obj, shipping_container) {
var append_to_table = "";
var table = shipping_container.find('table.shipping_information');
var max_td = 2;
var formatted_address = format_address(address_obj); //returns a table with the address
//are there any rows in the table
var is_tr = table.find('tr.add_container').length;
if (!is_tr) {
//no tr so append tr and td
//colspan should be max_td
append_to_table = "<tr class='add_container'><td class='add_container'>" + formatted_address + "</td></tr>";
table.append(append_to_table);
} else {
//there is a tr
var last_tr = table.find('tr.add_container:last');
//number of tds in the last row
var num_td = last_tr.find('td.add_container').length;
if (num_td >= max_td) {
append_to_table = "<tr class='add_container'><td class='add_container'>" + formatted_address + "</td></tr>";
table.append(append_to_table);
} else {
append_to_table = "<td class='add_container'>" + formatted_address + "</td>";
last_tr.append(append_to_table);
}
}
}
function format_address(address_obj){
var address_table = "<table border='1'>";
address_table += ("<tr><td class='shipping_address_table'>" + address_obj.attn + "</td></tr>");
address_table += ("<tr><td class='shipping_address_table'>" + address_obj.company_name + "</td></tr>");
address_table += ("<tr><td class='shipping_address_table'>" + address_obj.address_1 + "</td></tr>");
address_table += "</table>";
return address_table;
}
$(document).ready(function(){
$('body').on('click', '#button', function(){
var address_obj = {
attn : "sample attention",
company_name : "sample company",
address_1 : "sample line 1"
},
shipping_container = $('#wrapper');
add_shipping_address_to_shipping_container(address_obj, shipping_container);
});
});
<td>
附加到<table>
元素时,jQuery会自动添加<tr>
标记,因此必须将其附加到最后一个<tr>
。
http://jsbin.com/exutaq/1/edit
此外,您对现有行的检查是错误的:
var is_tr = table.find('tr.shipping_address_container_table').length;
应该是:
var is_tr = table.find('tr.add_container').length;
相关文章:
- 不显示带有本地json文件数据的谷歌地图脚本
- 如何创建带有插槽的vue js组件预加载程序
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- Javascript”;类“;带有参数的扩展
- 带有加号的电话号码验证(可选)
- 创建带有和不带有JavaScript的Bootstrap下拉菜单
- 使用D3.js计算带有字母间距的文本长度
- 使用带有JavaScript的SOAP WebService
- 下拉框,带有展开的optgroup
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 带有验证和隐藏字段值的提交按钮
- 如何使用带有Preact的React路由器
- d3-append()带有函数参数
- 未捕获的语法错误:带有 .append() 字符串的意外标识符
- 带有 .append() 的内部 .each()-循环
- 带有jQuery append()的CSS 3动画
- Jquery生成带有append()按钮冲突的html
- 在javascript函数中发送一个带有append的数组
- 使<td>带有jquery append()的标记