我有一段代码会颠倒我窗体上的所有复选框。我有多个元素(不仅仅是复选框,而且还有<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,如果它们存在,就使用它们,如果它们不存在,则返回到你的函数。它们可能会快得多。 –