我实际上在对jQuery's .clone()的API调用中犯了一个错误。
而不是使用http://jsfiddle.net/AXsB5/17/ (您需要在小提琴中单击才能执行.clone() ):
$(".foo").click(function() {
var el = $(this).clone();
el.css({ color: "orange" });
$("#bar").append(el);
});我错误地使用了http://jsfiddle.net/AXsB5/18/
$(".foo").click(function() {
var el = $.clone(this);
$(el).css({ color: "orange" });
$("#bar").append(el);
});jQuery API docs会建议它不应该在第二种情况下工作。我想知道为什么这两个案例都有效?
发布于 2014-03-25 15:26:57
根据$ vs $()的说法
到目前为止,我们一直在处理在jQuery对象上调用的方法。
例如:
$( "h1" ).remove();
如上所述,大多数jQuery方法都是在jQuery对象上调用的;这些方法被称为$.fn名称空间或"jQuery原型“的一部分,最好将其视为jQuery对象方法。
但是,有几个方法不作用于选择;这些方法被认为是jQuery名称空间的一部分,最好将它们视为核心jQuery方法。
对于jQuery的新用户来说,这种区别可能会令人难以置信地困惑。以下是你需要记住的:
在jQuery选择上调用的命名方法位于$.fn命名空间中,并且在$
但是,使用调试器在JSFiddle中运行时,它似乎从未访问过$.fn名称空间上的clone()方法,而实际上正在访问$().clone()。这可能是因为它将$().clone()映射到$.clone()中(它在加载jquery文件时运行),就像上面Arun P Johny链接的源代码一样。我希望这是合理的..。我的建议是通过一个调试器来亲眼看看。
发布于 2014-03-25 15:23:05
.clone()方法在内部使用它,因此两者是相同的
clone: function( dataAndEvents, deepDataAndEvents ) {
dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
return this.map( function () {
return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
});
}https://stackoverflow.com/questions/22627651
复制相似问题