[英]How does JavaScript store DOM elements in variables?
我的意思是當你執行以下操作時,JavaScript如何存儲DOM元素:
var foo = document.getElementsByTagName('p');
foo變成了什么? 一個對象數組? 以及如何向該變量添加更多元素,例如:
var bar = document.form[0].getElementsByTagName('input'); // 5 elements
var foo = document.form[1].getElementsByTagName('input'); // 4 elements
bar =+ foo;
for (i=0;i<bar.length;i++){
console.log(bar.value); // 9 logged values
}
是否可以向已經包含元素的變量添加更多相同類型的元素? 我是否必須循環遍及我想要添加的變量中的所有元素,並將它們“推”到我想要所有數據的變量中?
getElementsByTagName
(以及類似的方法,如getElementsByName
, getElementsByClassName
等)返回一個NodeList
(或HTMLCollection
,顯然取決於瀏覽器,另請參閱HTMLCollection,NodeLists和對象數組之間的差異 )。
盡管它是一個類似數組的對象,即它具有數字屬性和.length
屬性,但您無法向其中添加新元素。
要修改NodeList
,必須將其轉換為常規數組。 這可以通過數組方法.slice
輕松實現,同時您可以使用.concat
合並兩個列表:
bar = Array.prototype.slice.call(bar).concat(Array.prototype.slice(foo));
這是有效的,因為大多數本機數組方法的定義方式使得參數不必是實際數組,而是類似數組的對象。
NodeList
和最終數組之間值得注意的差異是:
bar = + foo;
這僅適用於字符串連接,它將是bar+= foo
但這里的bar和foo都是DOM對象。 所以如果你想添加相同類型的元素,你可以創建一個數組。
例如,
var myArray =[]
myArray.push(foo);
myArray.push(bar);
foo成為了這個功能。 因此,您無法將foo添加到bar,因為這沒有意義。 這就像試圖做:
document.form[0].getElementsByName('input') document.form[1].getElementsByName('input');
您可以在單個數組中包含多個元素。 我發現這是達到解決方案的最簡單方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.