好的,所以我正在写一个小插件......没什么大不了的,但我遇到了这个问题(剥离了以显示孤立的问题)
我的插件使用jQuery .wrap()
,在此示例中我也将使用.after()
。
(function( $ ) {
var newWrap = $('<div/>');
$.fn.smartform = function() {
this.wrap(newWrap);
return this;
};
}( jQuery ));
实施与.after()
$(document).on('click', '#addInput', function(){
var newInput = $('<input/>').smartform().val('Just Added');
$(this).after(newInput);
});
我的函数正确返回正确的目标对象,因为我看到新输入的值是'Just Added'但是输入没有被包装,我不明白为什么。
我可以通过这种方式(下方)使用它,但它并不理想,因为取决于新元素的插入方式(.append
.before
.after
)会强制遍历定位新添加的元素。
$(document).on('click', '#addInput', function(){
var newInput = $('<input/>').val('Just Added');
$(this).after(newInput).next('input').smartform();
});
任何想法都会很棒,如果您有任何问题可以随意提出......
提前谢谢
答案 0 :(得分:1)
问题是newInput
指的是您创建的input
元素,它仍然不是dom的一部分。当你包装输入时,包装器只在内存中而不是在dom中创建。
因此,当您在newInput
中使用after()
时,输入将从内存div
中删除,并在button
之后插入,因此包装元素将丢失。< / p>
$(document).on('click', '#addInput', function () {
var newInput = $('<input/>').smartform().val('Just Added');
$(this).after(newInput.parent());
});
演示:Fiddle