jquery - 使用相同的 jQuery 对象设置不同的 html 节点时遇到问题

标签 jquery

我正在使用 jQuery 1.9.0,我的 html 是:

<div id='div1'>    
</div>
<div id='div2'>
</div>

我的js:

var input = $("<input type='text'>");
$('#div1').html(input);
$('#div2').html(input);

我对这段代码的理解是

input is a jQuery object, and I can set div1 and div2 with it separately just like I can assign one variable's value to many other variables in programming languages.

基于这样的理解,我的期望是:

<div id='div1'>
    <input type="text">
</div>
<div id='div2'>
    <input type="text">
</div>

但我得到:

<div id='div1'>
</div>
<div id='div2'>
    <input type="text">
</div>

如果我只是调用 $('#div1').html(input);div1 将具有 input 元素。 为什么 div1input 元素在调用 $('#div2').html(input); 后消失?

我知道如何绕过这个问题,但我很想知道这种行为的原因。

提前致谢!

更新:

我感谢所有真诚回答这个问题的人,我对每个答案都投了赞成票。我现在对这个问题有了线索,但我仍然想知道为什么不同的节点(div1div2)不能引用同一个对象。在C语言中,不同的变量可以引用相同的内存地址。这两个引用有什么区别?

最佳答案

克隆它,以解决引用问题(在下面添加更多详细信息):)

var input = $("<input type='text'>");
$('#div1').html(input.clone());
$('#div2').html(input.clone());

发生这种情况的原因是因为输入是一个 jQuery 对象。将其视为引用。第一次使用输入时,#div1 会消耗它,但随后引用仍然在内存中,当您将其添加到 #div2 时,它会重新消耗它。

关于jquery - 使用相同的 jQuery 对象设置不同的 html 节点时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481034/

相关文章:

JQuery - 使彩色条展开以显示事件链接/悬停动画

javascript - 如何在daterangepicker中添加时间

javascript - 使用javascript将多维数组字符串化

javascript - 在 Masonry 中使用 Django 无限分页

javascript - 使用 JQuery.html() 时何时执行内联脚本?

javascript - 在没有 id 的标签内重命名类

java - 从 servlet 获取数据到 ajax?

jquery - 向下滑动菜单,但不会移动其他所有内容

Javascript/jQuery - 如何在提交表单之前暂停循环的执行?

javascript - 如何选择未选中的复选框而不是不确定状态的复选框