Viele ältere Browser bieten keine Unterstützung für querySelectorAll
ou getElementsByClassName
Sie müssten also eine Schleife über alle <input>
Elemente in diesen Browsern. Es ist jedoch immer am besten, zuerst nach diesen Funktionen zu suchen.
Zweitens: Sie sollten niemals $(this).is(":checked")
- nicht einmal in jQuery - es ist ein sehr langsamer Weg, wenn man auf der Suche nach this.checked
.
Das sollte Sie in Schwung bringen:
var base = document,
inps, tmp, i = 0, reg = /\bcheckbox\b/;
// getElementsByClassName is the fastest method
if (base.getElementsByClassName)
inps = base.getElementsByClassName("checkbox");
// Followed by querySelectorAll
else if (base.querySelectorAll)
inps = base.querySelectorAll(".checkbox");
// But if neither exist, loop through all the elements and check the class
else {
inps = [];
var tmp = base.getElementsByTagName("input");
i = tmp.length;
while (i--) {
if (reg.test(tmp[i].className)
inps.push(tmp[i]);
}
}
// Finally, loop through the matched elements and apply your logic
i = inps.length;
while (i--) {
var current = inps[i];
if (current.checked) {
// logic here
}
}
Im obigen Beispiel können Sie den Wert von base
zu jedem Element. Das bedeutet, dass, wenn alle diese Elemente einen gemeinsamen Eltern- oder Vorgängerknoten haben, Sie dieses Element als Basis festlegen können und es sollte schneller laufen, z.B:
var base = document.getElementById("myForm");