非常に一般的なシナリオの例では、要素のクラス全体のスタイルを変更する必要がある場合、次のような(単純化された一般化された)コードがあります。要素全体のJavaScript効率的なスタイル変更
var elements = document.getElementsByTagName('div');
for (var i = 0; i < elements.length; i++)
if (elements[i].className == 'HideMe')
elements[i].style.visibility = 'hidden';
これは、ドキュメントからすべてのdiv
の要素を取得し、それらを介してループし、及び「隠し」にクラス「HideMe」を持っているものの可視性を変更します。一方、このコード:
document.innerHTML.replace(/class="HideMe"/mg, 'class="HideMe" style="visibility: hidden"');
は、クラス「HideMe」を持っているすべてのものに不可視のスタイルを挿入します。私はJavaScript
に新しく、間違ってはいませんが、これまでに見たすべての例、すべてのチュートリアルでは、最初の方法を教えています。 1つのライナー、1つの関数呼び出し、よりインテリジェントなもので作成された置換アルゴリズムは、if
ステートメントのどの種類のループよりも高速かつリソース集約的であるべきですか?
document.innerHTML.replace('id="foo"', 'id="bar"');
の代わり:
document.getElementById('foo').id = 'bar';
を検査コードは全く同じですが、パフォーマンスのために、私はおそらくそれ変更にする必要があります質問は、なぜしないで、実際にはより一般的なものです私は何か重要な違いを測定することができますので、何千もの要素のスタイル。私たちが他の方法よりも一つの方法を好む理由がある、よく議論されている理由はありますか?
string.prototype.replaceは破壊的ではなく、* new *文字列を返します。私はそれを覚えていませんが、DOM全体の書き換えがいくつかのノードを変更するよりもパフォーマンスが良いとは思いません。 .. –
行の数は効率の非常に良い尺度ではありません。また、正規表現エンジンはコード#1よりも多くのループとifをフードの下で使用しています。 – JJJ