我目前有一個真空發生器的草圖。雖然它工作正常,但速度很慢。我使用jQuery將每個布爾值組合添加到<table>
。對於每個值,通過jQuery創建一個<td>
元素,然後將其添加到<table>
。此外,我使用的是一個漂亮的按鈕集而不是單選按鈕的jQuery UI。在jQuery中,如何高效地添加大量元素?
在我的發佈代碼提取中,table
是一個包含每個布爾組合的數組。也許我的代碼有點難以理解,但基本上可以歸結爲,使用4個布爾變量(16種可能性),96 <td>
元素是通過添加類和data
屬性設置創建的。在第二部分中,創建三組三個單選按鈕並將其轉換爲jQuery UI按鈕集。
使用計時器我發現大概需要0.4秒才能填滿所有內容。這並不是什麼大不了的事情,但它肯定是顯而易見的,並且不會對用戶產生積極的影響,因爲每次他進入不同的布爾公式時,都需要半秒的時間才能加載。
$table = $('#table');
$.each(table, function(k, v) {
$tr = $('<tr>').addClass('res').data('number', k);
$.each(v[0], function(k2, v2) {
$td = $('<td>').text(v2).addClass(v2 ? 'green notresult' : 'red notresult');
for(var i = 0; i < 4; i++) {
$td.data(i, i === k2);
}
$tr.append($td);
});
$tr.append($('<td>').addClass('spacing'));
$table.append(
$tr.append(
$('<td>').text(v[1]).addClass(v[1] ? 'green result' : 'red result')
)
);
});
// ... here is some code that's not slowing down
$radiobuttonsdiv = $('#radiobuttonsdiv');
for(var i = 0; i < 4; i++) {
var $radiobase = $('<input>').attr('type', 'radio')
.attr('name', 'a'+i)
.click(handleChange);
// .label() is a custom function of mine which adds a label to a radio button
var $radioboth = $radiobase.clone().val('both').label();
var $radiotrue = $radiobase.clone().val('true').label();
var $radiofalse = $radiobase.clone().val('false').label();
var $td1 = $('<td>').addClass('varname').html(i);
var $td2 = $('<td>').attr('id', i);
$td2.append($radioboth, $radiotrue, $radiofalse).buttonset();
var $tr = $('<tr>').append($td1, $td2);
$radiobuttonsdiv.append($tr);
}
我的問題是:
- 怎麼能表填充使用jQuery進行優化?或者在這種情況下表格可能不是最好的解決方案?
- 它可能暫停繪圖,因爲這可能會放緩一切?