当我使用jQuery动态创建div时,使用它来包装另一个元素(使用jQuery.wrap()方法)并将一些事件绑定到包装器,它们不会被触发。为什么呢?
看到这个小提琴 - http://jsfiddle.net/tqzzdu21/
var $wrapper = $('<div class="random-wrapper"></div>');
$('.random-element').wrap($wrapper);
$wrapper.click(function(){
alert('Sh*t happens ..');
});
只有被委托方法绑定的事件监听器才会被触发,但我没有看到为什么它不能直接触发绑定到元素实例的事件的原因。
答案 0 :(得分:2)
因为使用.wrap()会在传递元素实际包装之前创建传递元素的克隆。因此,包装中使用的实际元素与传递的元素不同(在这种情况下,它不由$wrapper
引用)。
相反,如果您访问目标元素的父级并绑定事件,它应该工作
var $wrapper = $('<div class="random-wrapper"></div>');
$wrapper.click(function(){
alert('before wrap - wrapper click');
});
$('.random-element').wrap($wrapper);
$wrapper.click(function(){
alert('wrapper click');
});
$('.random-element').parent().click(function(){
alert('parent click');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="random-element">Lipsum</div>
&#13;
.wrap()函数可以接受任何可能的字符串或对象 传递给$()工厂函数以指定DOM结构。这个 结构可以嵌套几层深,但应该只包含 一个最重要的元素。 此结构的副本将被包裹 匹配元素集中的每个元素。此方法 为链接目的返回原始元素集。