我动态创建了一个列表内容:
for (var i = 0; i<length; i++) {
var $li = $('<li />', {
text: ....
}).appendTo($list);
myArray.push($li);
// This doesn't work
$(myArray).click(function (e) { alert('cc'); });
但是当我得到所创建元素的父元素时,它可以工作
// This works
$('ul.liste').first().find('li').click(function (e) {alert('cc'); });
$(myArray)
和$('ul.liste').first().find('li')
之间的区别是什么?$()
包装数组会起作用,但显然不行。答案 0 :(得分:2)
您可以使用add
:
var $set = $();
for (var i = 0; i<length; i++) {
var $li = $('<li />', {
text: ....
}).appendTo($list);
$set = $set.add($li);
}
$set.click(...
如果您更喜欢构建本机数组,然后将其转换为jQuery集合,那么您可以
var $set = $.add.apply($(), myArray);
答案 1 :(得分:2)
myArray
是本机数组,你需要jQuery对象绑定$('ul.liste').first().find('li')
返回的事件处理程序,因此它可以工作。
您可以使用.add()
创建jQuery对象的集合,然后使用它来绑定事件处理程序。
//Create empty jQuery object
var myArray = $([]);
var $list = $('.list')
for (var i = 0; i < 5; i++) {
var $li = $('<li />', {
text: i
}).appendTo($list);
myArray = myArray.add($li);
}
// This doesn't work
myArray.click(function(e) {
console.log(this.textContent);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class='list'>
</ul>
&#13;
答案 2 :(得分:1)
您需要loop
代替数组,
以下内容不正确,因为它未绑定相应元素上的click
事件。
$(myArray).click(function (e) { alert('cc'); });
而是循环为,
$(myArray).each(function(){
$(this).click(function (e) { alert('cc'); });
});
答案 3 :(得分:1)
1)$(myArray)和$(&#39; ul.liste&#39;)之间的区别是什么?first()。find(&#39; li&#39; )吗
这里,myArray不是任何jQuery对象,而是包含jQuery对象作为其元素的普通数组。您永远不会将事件绑定到数组或字符串或任何其他数据类型。总是将事件绑定到jQuery对象(包含一些DOM元素)。因此,您应该逐个绑定myArray的每个元素,而不是绑定myArray。 当你使用$(&#39; ul.liste&#39;)时,它工作正常,因为它是一个带有一些DOM元素的jQuery对象。
2)如何正确地将js数组转换为jquery集合?我认为用$()包装数组会起作用,但显然不行。
您不能将js Array转换为jQuery对象。但是你将任何DOM元素转换为jQuery对象: 例如,
var elem = document.getElementById("myElem"); // a DOM element
$(elem) //a jQuery object
阵列只是为了保存一些数据而不是用于DOM操作。