[英]New to javascript don't understand arrays
好的,我有一個簡單的HTML文檔:
<head>
</head>
<body>
<div id="notInvolved"> This div is static</div>
<div id="thing01"></div>
<div id="thing02"></div>
<div id="thing03"></div>
</body>
我想使用外部JavaScript來操作div。 我的計划如下
我顯然不明白如何構建動態數組...(我不能靜態地做到這一點,我不知道最終我將擁有多少東西## div)
我以為我可以做var divCounter = [document.getElementById("thing"+ * + *)];
然后添加字符串(例如thing01
, Thing02
)。 但這是行不通的。 如何為getElementById
設置通配符? 如果不能,怎么辦?
有沒有辦法做到這一點,還是我吠錯了樹? 我討厭成為新手。
一般來講(因為您提供的代碼很少),當事物是唯一的時,應該使用ID;當需要分組訪問事物時,應使用類。 做這樣的事情更有意義:
<body>
<div id="notInvolved"> This div is static</div>
<div id="thing01" class="affected"></div>
<div id="thing02" class="affected"></div>
<div id="thing03" class="affected"></div>
</body>
一旦有了將它們組合在一起的東西,就可以使用document.getElementsByClassName('affected')
來檢索它們。 這比嘗試使用for
循環或其他某種構造來檢索單個元素要有意義得多。
您可以使用通配符選擇頁面上的所有元素,然后使用正則表達式過濾元素。
var all =document.getElementsByTagName('*');
var r = /^thing\d+$/;
var test = function(el){
return r.test( el.getAttribute('id'));
}
var elements = [];
for(var i=0,l=all.length;i<l;i++)
If(test(all[i]))
elements.push(all[i]);
您應該在要修改的動態div上使用類,然后遍歷getElementsByClassName的結果:
var dynamicDivs = document.getElementsByClassName('dynamic');
for (var i = 0; i < dynamicDivs.length; i++) {
// do whatever you want with dynamicDivs[i]
}
我不完全了解您要完成的工作。 無論如何,要讓您了解如何僅在其ID以字符串“ thing”開頭的情況下向數組添加元素,這是一個簡單示例,說明如何使用for循環,getElementByTagName函數以及如何使用訪問DOM元素的屬性。 您真正想做的事情(將元素添加到數組中)是使用divCounter數組的push方法完成的。
var everyDiv = document.getElementsByTagName('div');
var divCounter = [];
for( var i = 0; i < everyDiv.length; i++ ){
var currentDiv = everyDiv[i];
var currentID = currentDiv.id;
if (currentID != null && currentID.indexOf('thing') == 0){
divCounter.push(currentDiv);
};
}
var res = divCounter.length;
當然,這是為了清楚起見,我會從另一個角度來解決這個問題,並且會以更簡潔的方式對其進行編碼。 我同意其他答案:這些div之間共享一個類是選擇這些元素的最佳方法。 一個相同的(具有相同的程序性方法)示例是:
var everyDiv = document.getElementsByTagName('div'),
divCounter = [],
i, currentID;
for( i = 0; i < everyDiv.length; i++ ){
currentID = everyDiv[i].id;
if ( currentID && currentID.indexOf('thing') == 0){
divCounter.push(everyDiv[i]);
};
}
這是完全一樣的,只是在開頭聲明了變量。 因為在JavaScript中變量的范圍是函數而不是代碼塊,所以理想的情況是在開始時使用單個“ var”聲明來啟動函數。
function load() {
var divTags = document.getElementsByTagName("div");
var divArray = new Array();
var j = 0;
for(i = 0; i < divTags.length; i++) {
if(divTags[i].id.substr(0,5) == "thing") {
divArray[j++] = divTags[i].id;
}
}
for(i = 0;i < divArray.length; i++)
alert(divArray[i]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.