javascript - 将 jQuery .wrap() 与 .after() 链接起来

标签 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);

});

我的函数正确返回正确的目标对象,因为我看到新输入的值是“刚刚添加”,但输入没有被包装,我不明白为什么。

我可以让它以这种方式工作(如下),但它并不理想,因为这取决于新元素的插入方式( .append .before .after )将强制以不同方式遍历以定位新添加的元素。

$(document).on('click', '#addInput', function(){

    var newInput = $('<input/>').val('Just Added');
    $(this).after(newInput).next('input').smartform();

});

任何想法都会很棒,如果您有任何问题,请随时提出...

提前谢谢

最佳答案

问题是 newInput 引用了您创建的 input 元素,它仍然不是 dom 的一部分。当您包装输入时,包装器仅在内存中创建,而不是在 dom 中。

因此,当您在 after() 中使用 newInput 时,输入将从内存 div 中删除,并插入到 之后>button 因此包装元素丢失。

$(document).on('click', '#addInput', function () {

    var newInput = $('<input/>').smartform().val('Just Added');
    $(this).after(newInput.parent());

});

演示:Fiddle

关于javascript - 将 jQuery .wrap() 与 .after() 链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25819656/

相关文章:

javascript - 使用 Lodash 复制除一个字段外的所有字段,而不使用 Object.assign()

jquery - 我如何在我的网站上实际使用history.js

javascript - 使用相似的名称动态访问表单值

javascript - 饼图点击问题 - 未检测到点击

javascript - 我可以使用 jQuery 动态创建文件(及其内容)吗?

javascript - 如何在 ChartJS 中使用溢出滚动修复图表图例宽度-高度

javascript - 逗号是否仅应用于 JavaScript 中的 console.log 以将变量与字符串连接起来?

javascript - 如何在字符串中查找指定的 HTML 元素

javascript - 放置在模态中时无法识别 ID

java - 等到 JQuery .replaceWith 完成