1

私は次のコードを試しています:

<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script>
$(document).ready(function(){
  $("span").click(function(){
    alert($(this).offsetParent().length);
  });
});
</script>
</head>
<body>
<p>If you click on me, I will disappear.</p>
<p><span>Click me away!</span></p>
<p>Click me too!</p>
</body>
</html>

jQueryのドキュメントからoffsetParent()、最も近い位置にある親を返すことになっています。これは、「静的絶対相対」として明示的に定義された親意味します。ここでは、どの要素に対しても宣言されていませんが、アラートがポップアップ表示されます1.どうしてですか?position,or

4

1 に答える 1

4

まず、戻り結果を見てみましょう。

[html, prevObject: jQuery.fn.jQuery.init[1], context: span, jquery: "1.9.0", constructor: function, init: function…]

だから$(span).offsetParent()あなたのためにHTML要素を取得します。

offsetParentそれでは、 :の実装を見てみましょう。

offsetParent: function() {
    return this.map(function() {
        var offsetParent = this.offsetParent || document.documentElement;
        while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
            offsetParent = offsetParent.offsetParent;
        }
        return offsetParent || document.documentElement;
    });
}

上記のコードから、配置された親がない場合、要素offsetParentが返されることがわかります。HTML

唯一の悪い点は、そこになかったドキュメントを見たときです。

実際にoffsetParent使用できるものがあるかどうかを確認するには、次のようにします。

document.getElementsByTagName('html')[0] === $(elem).offsetParent()[0]

于 2013-01-22T08:09:00.637 に答える