[英]how can i create an image array, each with a unique id using getElementById in javascript?
這是我的代碼,但是當我嘗試使用圖像引用時,它的值為null
。 我希望能夠使用它來訪問表中的另一個圖像,並將src
屬性更改為preloadImages
數組中的一個。 我已經創建了表,但我無法獲得preloadImages
數組的各個元素的preloadImages
。 我希望每個圖像都有一個使用document.getElementById('id')
的唯一ID請幫助!! 非常感激!
var preloadImages = new Array();
SIZE = 52;
for(var h=0; h<SIZE; h++){
preloadImages[h] = new Image();
preloadImages[h].src = h+'.png';
preloadImages[h].height =100;
preloadImages[h].width = 70;
preloadImages[h].id = "cardImage"+h+"";
var cardImageRef = document.getElementById("cardImage"+h+"");
document.write(cardImageRef+'h'); //This line is for testing, it just returns null
}
除非元素存在於DOM樹中,否則不能使用getElementById()
。 此修改將它們添加到DOM:
for(var h=0; h<SIZE; h++){
preloadImages[h] = new Image(70, 100); // size here
preloadImages[h].src = h+ ".png";
preloadImages[h].id = "cardImage" + h;
document.body.appendChild(preloadImages[h]); // add to DOM, or some parent element
var cardImageRef = document.getElementById("cardImage" + h);
document.write(cardImageRef + "h"); //This line is for testing, it just returns null
}
但是,由於您已經擁有了數組中引用的元素,因此您可以使用id的索引(而不是完全使用id)查看元素。 如果您的頁面布局有多個元素,這往往會更快。
var image = preloadImages[index];
如果您使用的圖像無法通過索引識別,您可以這樣做(但在這種情況下可能不相關):
function getImage(id) {
for(var i = 0; i < preloadImages.length; i++) {
if (preloadImages[i].id === id) return preloadImages[i];
}
return null;
}
所以你可以在這里使用它,例如:
for(var h=0; h<SIZE; h++){
preloadImages[h] = new Image(70, 100); // size here
preloadImages[h].src = h + ".png";
preloadImages[h].id = "cardImage" + h;
}
document.write(getImage("cardImage0"));
這里沒有理由使用ID。 通常,動態構造ID然后使用getElementById
在文檔中查找它是“代碼味道”。 您只需使用元素本身即可。
在您發布的代碼運行后, preloadImages
數組包含添加的元素。 您不需要使用getElementById
來查找剛構建的元素! 正如您所發現的那樣,在將元素插入到DOM之前,您根本無法使用它,而您尚未做好准備!
因此,在表邏輯中,您可以使用preloadImages
已有的引用直接插入您創建的圖像:
function makeTable(images) {
var table = document.createElement('table');
var tr = document.createElement('tr');
table.appendChild(tr);
for (var i = 0; i < images.length; i++) {
var td = document.createElement('td');
tr.appendChild(td);
// put the images in the TD
td.appendChild(images[i]);
}
return table; // to be inserted somewhere
}
document.body.appendChild(makeTable(preloadImages));
我覺得你很困惑,因為有些人已經養成了將ID作為引用元素的唯一方法的習慣。 它們通過連接字符串來構造ID,然后通過使用getElementById
在需要時檢索元素。 從本質上講,他們使用文檔本身作為一種全局的東西,您可以使用ID作為一種變量名稱來檢索事物。 在這種情況下,最好只使用JavaScript變量或數組中的元素本身。
函數document.getElementById()
只能用於引用已添加到DOM的元素。
但是,如果您希望通過ID引用圖像,則可以構建對象並使用id作為鍵:
var preloadImages = {};
SIZE = 52;
for(var h = 0; h < SIZE; ++h) {
var i = new Image();
i.id = 'cardImage' + h;
i.src = h + '.png';
i.width = 70;
i.height = 100;
preloadImages[i.id] = i;
}
之后你可以通過它的id來引用每個圖像對象,如下所示:
var img = preloadImages['cardImage2'];
// do something with image
document.body.appendChild(img); // add to page
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.