如何獲取指定層級(jí)DOM元素相對(duì)于上層DOM的left和top屬性?

如何獲取指定層級(jí)DOM元素相對(duì)于上層DOM的left和top屬性?

高效獲取dom元素相對(duì)父元素的定位信息

在網(wǎng)頁(yè)開(kāi)發(fā)中,準(zhǔn)確獲取DOM元素的定位信息至關(guān)重要。本文提供一種JavaScript方法,用于計(jì)算任意層級(jí)子元素相對(duì)于其指定父元素的left和top屬性值。

假設(shè)存在如下嵌套DOM結(jié)構(gòu):

<div class="wrapper" id="wrapper">     <div id="node-root">         <div id="node-2">             <div id="node-3"></div>             <div id="node-3-1"></div>             <div id="node-3-2"></div>         </div>         <div id="node-22">             <div id="node-22-1"></div>         </div>         <div id="node-33">             <div id="node-33-1"></div>         </div>     </div> </div>

我們需要獲取node-root及其所有子節(jié)點(diǎn)相對(duì)于wrapper元素的left和top偏移量。

首先,定義offset函數(shù)計(jì)算元素相對(duì)于文檔的偏移量:

/**  * 計(jì)算元素相對(duì)于文檔的偏移量  * @param {HTMLElement} ele DOM元素  * @returns {{top: number, left: number}}  */ function offset(ele) {   let position = { top: 0, left: 0 };   if (!ele || ele.nodeType !== 1) return position;   let offsetParent = ele.offsetParent;   position.top = ele.offsetTop;   position.left = ele.offsetLeft;   while (offsetParent) {     position.top += offsetParent.offsetTop;     position.left += offsetParent.offsetLeft;     offsetParent = offsetParent.offsetParent;   }   return position; }

然后,定義offsetInParent函數(shù),利用offset函數(shù)計(jì)算元素相對(duì)于指定父元素的偏移量:

/**  * 計(jì)算元素相對(duì)于指定父元素的偏移量  * @param {HTMLElement} ele DOM元素  * @param {HTMLElement} boundaryParent 父元素  * @returns {{top: number, left: number}}  */ function offsetInParent(ele, boundaryParent) {   let position = { top: 0, left: 0 };   let elOffset = offset(ele);   let parentOffset = offset(boundaryParent) || { top: 0, left: 0 };   position.top = elOffset.top - parentOffset.top;   position.left = elOffset.left - parentOffset.left;   return position; }

最后,調(diào)用offsetInParent函數(shù)即可獲取例如node-22-1相對(duì)于wrapper的left和top值:

console.log(offsetInParent(document.getElementById('node-22-1'), document.getElementById('wrapper')));

此方法適用于任何復(fù)雜的DOM結(jié)構(gòu),只需正確指定目標(biāo)元素和父元素即可。 該方法高效且準(zhǔn)確地解決了獲取DOM元素相對(duì)定位的問(wèn)題。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員