调用jquery对象的jquery方法是否总是返回相同的对象?

时间:2014-07-06 16:43:52

标签: jquery

来自jquery网站:

调用jQuery选择的方法位于$ .fn命名空间中,并自动接收并返回选择作为' this'。

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

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

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

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

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

但相反的filter方法会获得完整选择,但会更改它并将更改后的选择作为this返回。

在这里注意到的一件非常酷的事情是,您实际上可以使用end来获取以前的选择来完成您的工作。

答案 2 :(得分:0)

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

对于elementselector克隆,clone对象似乎没有selector属性object返回> 0,ieg ,试试

$(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/