5

根据 Jquery API 文档:

.position() 返回: 对象

描述: 获取匹配元素集合中第一个元素相对于偏移父元素的当前坐标。

此方法不接受任何参数。参考这里

但是我发现在某个地方使用这个:

$("#position1").position({
  my: "center",
  at: "center",
  of: "#targetElement"
});

一个对象已被传递给位置方法。这不违反API文档吗?似乎上面传递给对象的属性有一些特殊含义。这些属性说明了什么。它们做什么?我是jquery的完整初学者。所以也许我错了 。

4

4 回答 4

4

这个变体.position()jQuery UI 位置实用程序的一部分。它为您提供了一种以某种方式相对于另一个元素(或鼠标光标)放置元素的简单方法。

position()原始方法不接受参数是完全正确的……但是:

这个插件扩展了 jQuery 的内置 .position() 方法。如果没有加载 jQuery UI,调用 .position() 方法可能不会直接失败,因为该方法仍然存在。但是,不会发生预期的行为。

于 2013-05-01T12:30:25.547 回答
2

看看这个 - http://docs.jquery.com/UI/API/1.8/Position

该功能在 jqueryUI 位置实用程序中,不在 Core jQuery 中

于 2013-05-01T12:30:12.407 回答
1

让我们把它带到codez!快速浏览一下 jQuery 1.9.1 源代码会发现:

position: function() {
    if ( !this[ 0 ] ) {
        return;
    }

    var offsetParent, offset,
        parentOffset = { top: 0, left: 0 },
        elem = this[ 0 ];

    // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
    if ( jQuery.css( elem, "position" ) === "fixed" ) {
        // we assume that getBoundingClientRect is available when computed position is fixed
        offset = elem.getBoundingClientRect();
    } else {
        // Get *real* offsetParent
        offsetParent = this.offsetParent();

        // Get correct offsets
        offset = this.offset();
        if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
            parentOffset = offsetParent.offset();
        }

        // Add offsetParent borders
        parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
        parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
    }

    // Subtract parent offsets and element margins
    // note: when an element has margin: auto the offsetLeft and marginLeft
    // are the same in Safari causing offset.left to incorrectly be 0
    return {
        top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
        left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
    };
},

不读取参数,不使用参数。无论您在哪里看到该代码,它都不是 jQuery 核心。很可能是因为原作者使用了jQuery UI,它扩展了该方法。

于 2013-05-01T12:29:42.157 回答
1

根据位置的 jQuery API

  1. my:定义要定位的元素上的哪个位置与目标元素对齐。
  2. at:定义要对齐定位元素的目标元素上的哪个位置,
  3. of:用于定位的元素。如果您提供选择器,将使用第一个匹配元素。示例:"#targetElement"在您的情况下。
于 2013-05-01T12:36:11.223 回答