2

一連の div を更新して、にclass="oct_days"基づいて ID を付与しようとしてい:nth-child(n)ます。の形式idoct_n. forループを使用してこれをdivに設定してこれを達成しようとしています。

window.onload = function addOctDate() {
    var cls = document.getElementByClass("oct_days");
    for (var n = 1; n < 32; n++) {
        cls[n].id = "oct_" + n;
    }
};

フィドル ( http://jsfiddle.net/ascottz/D9Exm/ )

アイデアは持っ.oct_days:nth-child(1)ていることid="oct_1"ですが、idは設定されていません。

4

4 に答える 4

3

clsyour の問題は次のとおりです。

  1. htmlが初期化される前にwindow.onloadが実行されていました
  2. あなたは電話する必要はありdocument.getElementsByClassNameません
  3. 反復を 1 から開始します。インデックスは 0 ベースです。そこから開始して、+ 1以下に示すように を追加する必要があります。
  4. また、反復中は、リスト内の既知のアイテムのみを反復することをお勧めします

このコードを試してください:

function addOctDate() {
        var cls = document.getElementsByClassName("oct_days"); 
        for (n=0, length = cls.length; n < length; n++) {
            cls[n].id= "oct_" + (n + 1); 
        }
    }; 

addOctDate()
于 2013-10-09T01:48:11.897 に答える
2

機能はgetElementsByClassName.

コードがそのイベント内で既に実行されている間に表示されているため、フィドルは機能しませんwindow.onload(左側のドロップダウンには onLoad と表示されます)。HTML に 31 個の要素がないため、エラーになりますが、それでも ID が設定されます。

于 2013-10-09T01:37:00.707 に答える
1

あなたのコードは非常に簡単に修正できます

(function () {

  // .getElementsByClassName not .getElementByClass
  var cls = document.getElementByClassName("oct_days"),
  // set the stopping point DYNAMICALLY
      len = cls.length,
  // start the index at 0;
      n = 0;
  for (; n < len; n++) {
    cls[n].id = "oct_" + (n + 1);
  }
// ()(); auto runs the function 
})();
于 2013-10-09T01:48:33.380 に答える