Jquery 1.10 live()和clone()的组合-奇怪的行为
Jquery 1.10 combination of live() and clone() - weird behaviour
我想克隆一个元素并插入DOM中的另一个位置。(所以实际上我只是想"移动"它)。
在文档就绪时,一些事件在插件(我不想编辑)中绑定到我想要克隆的元素的子元素。
当我像这样克隆元素时:
$('.FSGD-logo-slider-element-info').each(function(){
$number = $(this).attr('data-trigger');
$element = $(this).clone(true, true);
$('.FSGD-logo-slider-element[data-index="'+$number+'"]').after($element);
$(this).remove();
});
元素被克隆,但它们不会对任何事件做出反应。
当我这样做的时候(看看第三行的实时方法):
$('.FSGD-logo-slider-element-info').each(function(){
$number = $(this).attr('data-trigger');
$element = $(this).live().clone(true, true);
$('.FSGD-logo-slider-element[data-index="'+$number+'"]').after($element);
$(this).remove();
});
它正在发挥作用。但是自从jquery 1.9之后,live方法被删除了,因此我也得到了一个错误输出。
我无法解释为什么代码可以工作,我也不知道没有live方法可以让它工作。
我希望有人能帮忙。那太棒了。
我想克隆一个元素并插入DOM中的另一个位置。(所以实际上我只是想"移动"它)。
然后移动它:
$('.FSGD-logo-slider-element-info').each(function(){
var $number = $(this).attr('data-trigger');
$('.FSGD-logo-slider-element[data-index="'+$number+'"]').after(this);
});
示例:
// Hook an event on a child of the info elements
$(".FSGD-logo-slider-element-info input").on("click", function() {
alert($(this).parent().attr("data-trigger"));
});
// Move the elements
setTimeout(function() {
$('.FSGD-logo-slider-element-info').each(function(){
var $number = $(this).attr('data-trigger');
$('.FSGD-logo-slider-element[data-index="'+$number+'"]').after(this);
});
$("p").remove();
}, 1000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="FSGD-logo-slider-element-info" data-trigger="1">
Info One <input type="button" value="Click me">
</div>
<div class="FSGD-logo-slider-element-info" data-trigger="2">
Info Two <input type="button" value="Click me">
</div>
<div class="FSGD-logo-slider-element-info" data-trigger="3">
Info Three <input type="button" value="Click me">
</div>
<div class="FSGD-logo-slider-element-info" data-trigger="4">
Info Four <input type="button" value="Click me">
</div>
<div class="FSGD-logo-slider-element" data-index="1">
Element One
</div>
<div class="FSGD-logo-slider-element" data-index="2">
Element Two
</div>
<div class="FSGD-logo-slider-element" data-index="3">
Element Three
</div>
<div class="FSGD-logo-slider-element" data-index="4">
Element Four
</div>
<p>Elements will move after a second</p>
旁注:我在上面的$number = ...
前面添加了var
。如果没有它,您的代码就会成为隐式全局的恐怖的牺牲品(当然,除非它是在父作用域中声明的,但它显然是作为本地的,所以这没有多大意义)。
相关文章:
- 根据id将json数组组合为一个json数组
- 接受不在列表中的值-引导组合框
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 组合两个javascript函数
- Telerik rad组合框多列数据绑定
- 组合 2 个 JavaScript .scroll 函数
- 如何使用jquery组合两个数组
- onChange不足以从Dojo组合框触发查询
- 组合承诺和非承诺值
- 所有控件的组合框
- 在D3中组合多个事件
- AngularJS-如何只对多个事件的组合采取行动
- 如何在服务、技能、投资组合等方面添加滑动效果
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 如何在谷歌可视化中组合数字和模式格式化程序
- 更改组合框分页后,getValue和getRawValue返回相同的值
- 类型错误:url未定义extjs 4正在填充组合框
- 我该如何组合这两个Greasemonkey脚本
- Jqgrid动态组合框填充不起作用
- Jquery 1.10 live()和clone()的组合-奇怪的行为