我有一段代碼會顛倒我窗體上的所有複選框。我有多個元素(不僅僅是複選框,而且還有<input type='text'>
)。我需要優化它的原因是因爲它需要大約兩到三秒來選擇所有複選框(現在275)。有沒有什麼辦法可以優化這段代碼?
這裏是我的代碼:
function FormInverse() {
var iCheckbox = 1; // Because there are multiple input elements, we need to distinquish the input element ID and the row id
var FormLength = document.FormFacturen.elements.length;
for (i=0; i < FormLength; i++) {
var FormElementType = document.FormFacturen.elements[i].type;
if (FormElementType == "checkbox") {
var Elements = document.getElementsByClassName('row' + iCheckbox); // Alle elementen in de array zetten
var iNumElements = Elements.length;
for (iElement=0; iElement < iNumElements; iElement++) {
if (document.FormFacturen[i].checked == true) {
Elements[iElement].className = "invoice-tr-standard row" + iCheckbox;
} else {
Elements[iElement].className = "invoice-tr-clicked row" + iCheckbox;
}
}
iCheckbox++;
document.FormFacturen[i].checked = !document.FormFacturen[i].checked;
}
}
}
這裏是document.getElementsByClassName
功能:
document.getElementsByClassName = function(cl) {
var retnode = [];
var myclass = new RegExp('\\b'+cl+'\\b');
var elem = document.getElementsByTagName('*');
for (var i = 0; i < elem.length; i++) {
var classes = elem[i].className;
if (myclass.test(classes)) retnode.push(elem[i]);
}
return retnode;
};
爲什麼你不會利用像jQuery的東西?這種類型的腳本在jQuery中非常簡單。 –
@Josh,因爲我從來沒有真正與jQuery合作過,所以我沒有經歷過它。如果最終結果是它會更快,那就沒問題。 – Devator
我一定會檢查瀏覽器是否已經實現了'document.getElementsByClassName()'或者Selectors API,如果它們存在,就使用它們,如果它們不存在,則返回到你的函數。它們可能會快得多。 –