【问题标题】:Will a jquery method called on a jquery object always return the same object?在 jquery 对象上调用的 jquery 方法是否总是返回相同的对象?
【发布时间】:2014-07-06 16:43:51
【问题描述】:

来自 jquery 网站:

在 jQuery 选择上调用的方法位于 $.fn 命名空间中,并自动接收并以“this”形式返回选择。

但是如果我使用 $('selector').clone() ,返回的对象不会是克隆对象而不是原始对象吗?一般来说,如何知道jquery方法的返回对象是什么?

【问题讨论】:

  • 查看方法文档。
  • 一般来说,当您有问题时,请务必阅读文档。
  • 但我在这里引用 jquery.com。
  • 返回原始对象有意义吗?
  • 权威参考是源代码。尤其是在这种怀疑文档有误的情况下。

标签: jquery


【解决方案1】:

对于clone(),您引用的文档看起来有误。

The end of the clone() implementation 明确指出返回的是克隆集。

jQuery.extend({
  clone: function( elem, dataAndEvents, deepDataAndEvents ) {
    var i, l, srcElements, destElements,
    clone = elem.cloneNode( true ),

    // --- Stuff removed for brevity ---

    // Return the cloned set
    return clone;
}

【讨论】:

  • 嗨,安德斯,我引用了learn.jquery.com/using-jquery-core/dollar-object-vs-function,但我想我可能误解了,他们的意思是对象方法总是返回“this”。现在“this”可以指代任何根据方法而变化的对象.For ex-this 指的是 clone() 的克隆对象。不过我可能还是错了。
  • 我认为他们在写这句话时并没有完全想到clone()。总的来说,这是真的,但clone()(也许更多?)是个例外。
【解决方案2】:

这里的想法是您可以链接 jquery 方法。有些方法可能会改变选择,有些则不会,但它们必须返回集合,因此它们可以被链接。比如

$('.pages').filter('.inactive').hide().end().filter('.active').show()

在这种情况下,方法hide 将接收选择为this 并将执行它应该执行的操作并返回this 不变。

但相反的filter 方法将接收完整选择但会更改它并将更改的选择返回为this

这里要注意的非常酷的一点是,您实际上可以使用end 来获取先前的选择来完成您的工作。

【讨论】:

    【解决方案3】:

    如果准确解释 OP 的问题,需要确定返回哪个 object ?是original还是clone

    对于elementselector 克隆,clone 对象似乎不具有object 处返回> 0selector 属性,即尝试

    $(function () {
    
        var original = $("div");
        var clone = $("div").clone(true, true);
    
        console.log(original.selector.length > 0, clone.selector.length > 0);
        // `true` , `false`
    
        $.fn.isClone = function () {
            return !$(this).selector.length > 0
        };
    
        console.log($(clone).isClone(), $(original).isClone());
        // `true` , `false`
    });
    

    jsfiddle http://jsfiddle.net/guest271314/LZaTM/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多