0

私のコードは、定義済みのクラス名を持つすべての div に HTML コンテンツを挿入する必要があります。jQuery を使用せず、少なくとも IE8 と互換性があります (したがって、getElementsbyClass はありません)。

html:

<div class="target">1</div>
<div class="target">2</div>
<div class="target">3</div>
<div class="target">4</div>

ジャバスクリプト:

var elems = document.getElementsByTagName('*'), i;
    for (wwi in elems) {
        if((' ' + elems[wwi].className + ' ').indexOf(' ' + "target" + ' ') > -1) {
            elems[wwi].innerHTML = "YES";
            //elems[wwi].innerHTML = "<div>YES!</div>";
        }
    }

ここで試すことができます。

ご覧のとおり、各 div 内に YES という単語が出力されています。コメントしてコードelems[wwi].innerHTML = "YES";を置き換えると 失敗します。elems[wwi].innerHTML = "<div>YES!</div>"div 要素を挿入すると DOM が変更され、その結果、FOR サイクルが失敗するためだと思います。私は正しいですか?

これは、innerHTML を作成するたびに for サイクルを呼び出すことで解決できます。また、コードを挿入するときに、クラス (data-codeAlreadyInserted=1 など) を追加して、次に FOR がその div に渡されたときに無視することができます。しかし、繰り返しになりますが、多くのタグを持つ平均的なサイトでは、ユーザーのブラウザーをフリーズさせることさえできるため、これは非常に悪い解決策です。

どう思いますか?各 innerHTML 呼び出しに挿入するタグの量がわからないとします。

4

3 に答える 3