首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jQuery中,为什么$.clone(this)与$(this).clone()相同?

在jQuery中,为什么$.clone(this)与$(this).clone()相同?
EN

Stack Overflow用户
提问于 2014-03-25 15:09:33
回答 2查看 450关注 0票数 3

我实际上在对jQuery's .clone()的API调用中犯了一个错误。

而不是使用http://jsfiddle.net/AXsB5/17/ (您需要在小提琴中单击才能执行.clone() ):

代码语言:javascript
复制
$(".foo").click(function() {
    var el = $(this).clone();

    el.css({ color: "orange" });
    $("#bar").append(el);
});

我错误地使用了http://jsfiddle.net/AXsB5/18/

代码语言:javascript
复制
$(".foo").click(function() {
    var el = $.clone(this);

    $(el).css({ color: "orange" });
    $("#bar").append(el);
});

jQuery API docs会建议它不应该在第二种情况下工作。我想知道为什么这两个案例都有效?

EN

回答 2

Stack Overflow用户

发布于 2014-03-25 15:26:57

根据$ vs $()的说法

到目前为止,我们一直在处理在jQuery对象上调用的方法。

例如:

$( "h1" ).remove();

如上所述,大多数jQuery方法都是在jQuery对象上调用的;这些方法被称为$.fn名称空间或"jQuery原型“的一部分,最好将其视为jQuery对象方法。

但是,有几个方法不作用于选择;这些方法被认为是jQuery名称空间的一部分,最好将它们视为核心jQuery方法。

对于jQuery的新用户来说,这种区别可能会令人难以置信地困惑。以下是你需要记住的:

在jQuery选择上调用的命名方法位于$.fn命名空间中,并且在$

  • jQuery中以命名空间的形式自动接收和返回选择,这些方法通常是实用程序类型的方法,不处理选择;不会自动向它们传递任何参数,并且它们的返回值会有所不同。

但是,使用调试器在JSFiddle中运行时,它似乎从未访问过$.fn名称空间上的clone()方法,而实际上正在访问$().clone()。这可能是因为它将$().clone()映射到$.clone()中(它在加载jquery文件时运行),就像上面Arun P Johny链接的源代码一样。我希望这是合理的..。我的建议是通过一个调试器来亲眼看看。

票数 4
EN

Stack Overflow用户

发布于 2014-03-25 15:23:05

.clone()方法在内部使用它,因此两者是相同的

jQuery.clone().clone()

代码语言:javascript
复制
clone: function( dataAndEvents, deepDataAndEvents ) {
    dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
    deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;

    return this.map( function () {
        return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
    });
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22627651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档