鍍金池/ 問答/HTML5  數(shù)據(jù)庫  HTML/ JavaScript使用createElement創(chuàng)建一個li,后如何檢測到已經(jīng)

JavaScript使用createElement創(chuàng)建一個li,后如何檢測到已經(jīng)插入到真實dom,并計算li的寬度

js通過createElement創(chuàng)建一個li,想要計算這個li的寬度,但是沒插入頁面之前計算寬度是0,插入頁面之后就能計算出li的真實寬度


class Tab{
    constructor(){
        const tab = document.createElement("ul")
        const li = document.createElement("li")
        tab.appendChild(li)
        li.textContent = "test"
        // 1、這個時候如果獲取li的寬度(li.offsetWidth),是0
        // 如何在tab插入真實dom上后再去計算 li.offsetWidth?
        return tab
    }
}

const tab = new Tab()
const root = document.getElementById('root')
root.appendChild(tab)
// 2、這個時候再去計算 li的offsetWidth 就不是0
// li 在render到頁面后會不會觸發(fā)什么事件,通過監(jiān)聽這個事件來獲取呢?
回答
編輯回答
墨沫

從你代碼來看, 在構(gòu)造函數(shù)中是獲取不到li的寬度的,因為在構(gòu)造函數(shù)中 你只做了把li插入到ul中 而ul并沒有插入到DOM中,故 li也就沒有插入到DOM中 所以你獲取不到,考慮換個思路 實現(xiàn)你的需求。

2017年12月1日 15:51
編輯回答
墨沫

因為在插入之前,各種樣式屬性都沒有應(yīng)用上,瀏覽器并不知道你里邊的內(nèi)容該以怎樣的方式來呈現(xiàn)。
插入到文檔中以后,才會被瀏覽器渲染出來,進而計算出盒模型相關(guān)的屬性。

2017年8月20日 17:16
編輯回答
扯不斷

有個監(jiān)聽事件 貌似叫 DOMNodeInserted 可以掛在 li 上面,然后呢,在插入的時候,就可以獲取到了

2017年10月4日 05:41
編輯回答
厭遇

看起來你需要 MutationObserver,它能夠偵聽 DOM 結(jié)構(gòu)的變化,調(diào)用函數(shù)處理。

2017年11月13日 22:41