我一直在寻找一种方法来对我非常复杂的表进行排序,并发现这种方法非常有效:
(已完成的代码在此处:http://jsfiddle.net/sg552sg552/Lsw6mnh4/15/ )
我的HTML代码是:
<table>
<thead>
<tr>
<th>string</th>
</tr>
</thead>
<tbody>
<tr>
<td>C</td>
</tr>
<tr>
<td>B</td>
</tr>
<tr>
<td>A</td>
</tr>
</tbody>
</table>
我的js代码是:
$('th').click(function() {
var table = $(this).parents('table').eq(0);
var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()));
for (var i = 0; i < rows.length; i++) {
console.info("== before append, rows count: " + $(table).find('tr').size() )
// WHY doesn't this "append" increase the total tr size ?
table.append(rows[i]);
console.info("== after append, rows count: " + $(table).find('tr').size() )
}
})
function comparer(index) {
return function(a, b) {
var valA = getCellValue(a, index),
valB = getCellValue(b, index);
return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB) ;
}
}
function getCellValue(row, index) {
return $(row).children('td').eq(index).html();
}
函数(对表格进行排序)工作得很好,但我只是想知道为什么“append()”函数不会增加“tr”计数,而没有“删除”任何“tr”的地方?
非常感谢。
答案 0 :(得分:3)
来自jQuery append
docs:
您还可以在页面上选择一个元素并将其插入另一个元素:
$( ".container" ).append( $( "h2" ) );
如果以这种方式选择的元素被插入到DOM中其他位置的单个位置,它将被移动到目标中(未克隆)
因此,元素实际上只是被洗牌,而不是被创建/销毁
答案 1 :(得分:0)
因为你实际上没有附加'tr',所以你只是找到已经存在的那些,将它们放入一个数组中,然后对它们进行排序。你实际上并没有告诉你的代码将任何'tr'附加到表中。