par*_*rsa 12 html javascript jquery dom dom-manipulation
有人可以解释为什么下面的代码片段不添加<foo>到两个#a及#b?
HTML:
<div id="a"></div>
<div id="b"></div>
Run Code Online (Sandbox Code Playgroud)
JS:
$(function(){
var $foo = $("<foo>HI</foo>");
$("#a").append($foo);
$("#b").append($foo);
});
Run Code Online (Sandbox Code Playgroud)
编辑:感谢有用的点,.append()移动元素的事实解释了这种行为.由于我的应用程序中的元素实际上是一个Backbone View .el,我宁愿不克隆它.
Dal*_*las 20
因为使用append实际上移动了元素.因此,您的代码将移动$foo到文档中#a,然后将其#a移至#b.你可以克服它而不是像你想要的那样克隆它 - 这样它就会附加一个克隆而不是初始元素:
$(function(){
var $foo = $("<foo>HI</foo>");
$("#a").append($foo.clone());
$("#b").append($foo.clone());
});
Run Code Online (Sandbox Code Playgroud)
你也可以追加htmlfrom $foo,它只是把dom放在它里面而不是元素本身:
$(function(){
var $foo = $("<foo>HI</foo>");
$("#a").append($foo[0].outerHTML);
$("#b").append($foo[0].outerHTML);
});
Run Code Online (Sandbox Code Playgroud)
以上示例假设您有一个更复杂的场景,其中$foo不仅仅是从字符串创建的jQuery对象...更有可能是从DOM中的元素创建的.
如果它实际上只是简单地以这种方式创建并且为此目的......根本没有理由创建jQuery对象,你可以直接追加字符串本身("<foo>HI</foo>"),如:
var foo = "<foo>HI</foo>";
$("#a").append(foo);
//...
Run Code Online (Sandbox Code Playgroud)
kri*_*ath 10
试试clone.顾名思义,这将复制$foo元素而不是移动,就像append这样做.
$(function(){
var $foo = $("<foo>HI</foo>");
$("#a").append($foo.clone());
$("#b").append($foo.clone());
});
Run Code Online (Sandbox Code Playgroud)
但是,为什么不用这个呢?
$("#a,#b").append($foo);
Run Code Online (Sandbox Code Playgroud)
这也可以:)
以下是这两种情况的演示:http://jsfiddle.net/hungerpain/sCvs7/3/
您需要create a new instance每次都想要附加到DOM.
否则它引用已经附加的相同实例.
删除$要添加的新div之前的符号,将其评估为jQuery对象,并具有上述限制.或clone元素.
$(function(){
var foo = "<foo>HI</foo>";
$("#a").append(foo);
$("#b").append(foo);
});
Run Code Online (Sandbox Code Playgroud)