2012-02-03 10 views
2

HTMLコレクションオブジェクトを配列として使用し、要素を追加しました。終了時に以下のコード、Javascript HTMLCollectionオブジェクトがfirefox10で正常に動作しない

var claimantEmailValues = document.getElementsByName("claimantEmails"); 
var defendantEmailValues = document.getElementsByName("defendantEmails"); 


var k = defendantEmailValues.length; 
for(var i=0; i<claimantEmailValues.length;i++){ 
     defendantEmailValues[k++] = claimantEmailValues[i]; 
} 

IはclaimantEmailsdefendantEmailsための2つのHTML入力要素それぞれを有するように、defendantEmailValuesの長さが4であるべきです。代わりに、長さは2であり、エラーはありませんでした。 firefox 10以外のfirefoxのすべてのバージョンでうまく動作しています。

答えて

3

JavaScript配列は、現在の長さ以上の数値プロパティを設定すると増加するのmagic長さプロパティを持つオブジェクトです。 HTMLCollectionオブジェクトの長さプロパティはありますが、のマジックではありません。数値プロパティを設定するときには増やすべきではありません。要素を追加するときは、プロパティ名として数字を使用して、名前付きプロパティをオブジェクトに追加するだけです。

あなたはArray.prototype.sliceを使用して最初のアレイにコレクションを変換する方がいいでしょう:

var slice = Array.prototype.slice, 
    claimantEmailValues = slice.call(document.getElementsByName("claimantEmails")), 
    defendantEmailValues = slice.call(document.getElementsByName("defendantEmails")); 

var k = defendantEmailValues.length; 
for(var i=0; i<claimantEmailValues.length;i++){ 
     defendantEmailValues[k++] = claimantEmailValues[i]; 
} 

それは可能性があります以前のFirefoxのバージョンの動作が誤っアイテムがHTMLCollectionインスタンスに追加することが可能だったバグはちょうどだけだったことFirefox 10で修正されました。

+0

ありがとうAndy。しかし、私は長さのプロパティを取得することができますが、私の問題は 'defendantEmailValues [k ++] = claimantEmailValues [i]'という文を実行した後で、長さは増えませんでした。 –

+0

@SelvakumarP:はい、私の答えは、プロパティがJavaScript配列のような* "マジック"ではないと言います。これはそれが増加しない理由です。私は少し最初の段落を明確にしましょう。 –

+0

ありがとうAndy !!!とった :-) –

関連する問題