2012-10-31 38 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是一个类。谢谢! –