使用.after()链接jQuery .wrap()

时间:2014-09-13 03:56:24

标签: javascript jquery

好的,所以我正在写一个小插件......没什么大不了的,但我遇到了这个问题(剥离了以显示孤立的问题)

我的插件使用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();

});

任何想法都会很棒,如果您有任何问题可以随意提出......

提前谢谢

1 个答案:

答案 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