2012-10-31 73 views
1

我想獲得一個動態創建的元素使用jQuery選擇器,但它返回一個空的數組。動態創建元素後jQuery選擇器

我做的是抓住一個空的div的第一件事:

var packDiv = document.getElementById('templates'); 
packDiv.innerHTML = ""; 

然後通過循環將項目添加到它:

packDiv.innerHTML = packDiv.innerHTML + "<img id='" + thumbName + "' src='thumbs/" + thumbName + "'/>"; 

循環結束後,我嘗試使用選擇項目:

console.log($("#"+thumbName)); 

並且它返回空數組。我搜索的所有東西都顯示爲使用.on,但所有示例都顯示設置事件處理程序。

我的問題是我如何格式化動態創建元素的選擇器?

+1

是什麼'的console.log(packDiv.innerHTML)'產生添加完所有項目後? –

+2

問題出在您提供的代碼片段之外; http://jsfiddle.net/pzz9A/ –

+0

@SalmanA它顯示了預期的數據。 –

回答

2

假設thumbName是一個文件名,例如foo.jpg,它不會像您期望的那樣被jQuery解析。 .jpg名稱的一部分被視爲類名稱,並且由於您沒有爲該元素提供此類名稱,所以jQuery返回一個空數組 - 它找不到與您的選擇器匹配的任何內容。實際上,您正在搜索ID爲foo和類名稱jpg的元素。

我會與此前進的道路是沿着這些路線的東西:

var packDiv = $('#templates'); 
packDiv.empty(); 

//inside a loop 
packDiv.append("<img class='" + thumbName.replace(/\./g,'') + "' src='thumbs/" + thumbName + "'/>"); 

console.log($("."+thumbName.replace(/\./g,''))); 
+1

我會使用正則表達式來匹配替換函數中的所有點:'replace(/\./ g,'')' –

+0

謝謝,我修復了代碼。舊版本只會替換它找到的第一個點。 – pckill

+0

我完全忘了它是整個文件名。它認爲JPG是一個類。謝謝! –