多くの古いブラウザではquerySelectorAll
またはgetElementsByClassName
をサポートしていないので、あなたはそれらのブラウザですべての<input>
の要素をループする必要があると思います。しかし、これらの機能を最初にチェックするのが常にベストです。
第二に、あなたはそれがthis.checked
を探している場合に行う非常に遅いパスです$(this).is(":checked")
— もないjQueryので—を使用しないでください。これは、あなたが軌道に乗る必要があります
:
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
}
}
を上記の例では、任意の要素にbase
の値を変更することができます。つまり、これらの要素に共通の親ノードまたは祖先ノードがある場合は、その要素をベースとして設定し、より高速に実行する必要があります。g:
var base = document.getElementById("myForm");
JQueryを使用しないでこのように簡単にできることがあれば、なぜJQueryを使用するのでしょうか。 – musefan
@musefanの顧客は、常に正気の議論を聞くわけではありません。 – JaredPar
@JaredPar:私は同意しません... "never";と言うべきです); – musefan