2011-03-08 11 views
11

Geçerli bir diziye bir öğe eklemeye çalışıyorum. Bir hata alıyorum bu şekilde yaparakJavascript Geçerli dizeye bir yazı eklemek

var arrayValues = new Array(); 
arrayValues.push("Value 1"); 
arrayValues.push("Value 2"); 
arrayValues = document.getElementsByTagName('a'); 
arrayValues.push("Value 3"); 

ve ben o hata atar yeni bir öğe eklemeye çalıştığınızda köprü koleksiyonunu aldıktan sonra, değeri 1 ve değer 2 alamadım: Nesne bu özelliği desteklemiyor veya itme metodu olan yöntem.

Köprüler toplandıktan sonra diziye ne oluyor? Buna yeni bir öğe nasıl ekleyebilirim?

cevap

14

Bunu mu demek istediniz: arrayValues.push(document.getElementsByTagName('a'));?

Aksi takdirde, değerlere itmiş olduğunuz dizinin üzerine yazılan getElementsByTagName() tarafından döndürülen NodeList'u atarsınız.

Yan not: new Array()'u kullanmanın bir nedeni yok. Sadece var arrayValues = []; yazınız.

+1

Ve olsa NodeList, bir Array değil "dizi benzeri." – jpsimons

2

Tüm <a> öğelerini diziye zorlamak istiyorsanız, önce NodeList öğesini bir diziye dönüştürmeniz gerekir. Çoğu kişi Array.prototype.slice.call(nodelist) kullanıyor.

Bir diziniz olduğunda, bir çağrıya atmak için function.apply ile birlikte array.push'u kullanabilirsiniz.

çıkan kodu gibi görünür:

var arrayValues = []; 
arrayValues.push("Value 1"); 
arrayValues.push("Value 2"); 
arrayValues.push.apply(arrayValues, Array.prototype.slice.call(document.getElementsByTagName('a'))); 
arrayValues.push("Value 3"); 
+0

"Push" için çağrı yapmanıza gerek yoktur. 'arrayValues' zaten bir dizidir ve' arrayValues.push() 'işlevine çağrı doğru işlevde (' push') doğru kapsamda ('arrayValues') yürütülür. –

+1

Aslında .push() 'için birden çok argüman göndermek istiyorum. Örneğin, var a = [], b = [2,3]; ', a.push (1); a.push (b); a.push (4)', sonra 'a'; '[1, [2,3], 4] '. Ancak, a.push.apply (a, b); 'yi kullanırsanız,' [1,2,3,4] 'ifadesini alırsınız. Bu cevabın beklenen davranışı: Tüm 'öğelerini varolan bir diziye itin. Ayrıca 'a = a.concat (b);' nin bir sürümü olduğunu da söyleyebiliriz. – Thai

+0

Tamam, bu daha mantıklı. Bu durumda, neden sadece 'concat()' yi kullanmıyoruz? –

İlgili konular