スパン要素に「ポップアップ」div を作成する必要があります。
フローティングdivを配置するための正しい境界を与えるために、その位置とサイズを決定しようとします。
<html>
<body>
<p>text a</p>
<div style="padding-left:200px;padding-top:500px">
<table class="message">
<tr><td>test <span id="test">hello</span> world</td></tr>
</table>
</div>
</body>
</html>
要素のこの情報を取得しようとしていますid=test
私は2つの方法を試しました:
最初にスパンを取得します
var span = document.getElementById('test');
HTML要素の位置(X、Y)を取得するで提案されたアプローチを使用してどちらかを計算するよりも
var x0 = 0;
var y0 = 0;
var el = span;
while(el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
x0 += el.offsetLeft - el.scrollLeft;
y0 += el.offsetTop - el.scrollTop;
el = el.offsetParent;
}
var x1 = x0 + span.offsetWidth;
var y1 = y0 + span.offsetHeight;
また、次を使用して試します:
var rect = span.getBoundingClientRect();
x0 = rect.left;
x1 = rect.right;
y0 = rect.top;
y1 = rect.bottom;
私がログに記録するよりも:
console.log(JSON.stringify([x0,x1,y0,y1]));
どちらの場合も、次のようになります。
[236,264,381,401]
500 ピクセルのテーブルの上の余白として正しくありません。
この問題を正しく解決するにはどうすればよいですか?
つまり、この要素の上に正しい位置にdiv
withを配置するにはどうすればよいですか?position:ablosute
注: JQuery やその他の分厚いツールキットは使用できません。むしろ、プレーンな JavaScript で移植可能なソリューションが必要です。
編集:ページにスクロールが必要な場合、つまりページのヘッド部分が非表示になっている場合は機能しないことに注意しました。どのように補正できますか?