2012-04-16 43 views
0

有一些html元素的某些属性,直到位于HTML DOM(例如offsetHeight或offsetWidth)中才能算出来。如果我创建了元素('div')并且想要使用div的offsetHeight,那么在将此元素附加到文档时是否会触发事件,以便我知道现在可以使用offsetHeight?事件告诉你一个元素已被追加到文档中?

回答

1

DOMNodeInserted可能是你在找什么。 有关DOM事件的详细信息,请参阅https://developer.mozilla.org/en/DOM/DOM_event_reference

+0

DOMNodeInserted在目前的浏览器中可以正常工作,但在IE9中不能正常工作,并且可能不会在几年后发布的浏览器中使用,因为DOM突变事件已被弃用,并将被替换为[突变观察者](http:///www.w3.org/TR/dom/#mutation-observers)。尽管现在你可以做的最好。 – 2012-04-16 09:16:21

+0

@TimDown,你能指点我的文章吗?它说HTML和JavaScript的这些特性将被弃用(希望看到什么)。另外,在这种情况下,你会推荐做什么?什么是突变观察者事件?我现在可以/如何使用突变观察者? – Derek 2012-04-16 10:33:06

+0

@Derek:[DOM3中的突变事件](http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents)提到突变事件被弃用,[正如当前的工作 - 进展DOM4](http://www.w3.org/TR/dom/#goals)。我从[WHATWG](http://www.whatwg.org/mailing-list)和[W3C public-webapps](http://lists.w3.org/Archives/Public/public-webapps/) ) 邮件列表。回覆。突变观察者,我相信他们只能在最近的WebKit浏览器中使用,所以你可以尝试一下,但并不真正在普通网络上使用它们。 – 2012-04-16 11:12:19

0

不,我不认为有这样的事件。但是你可以追加一个属性到新创建的元素,告诉你的脚本它被追加了。你可以这样做:

function appendSignal(el,toElement){ 
    to.appendChild(el); 
    el.isAppended = true; 
} 

var nwdiv = document.createElement('div'); 
// do stuff with nwdiv 
appendSignal(nwdiv,document.body); 
//doing other stuff 
if (nwdiv.isAppended) { 
    /* nwdiv.offsetHeight should be available... */ 
} 
+0

有这样的事件。请参阅ThiefMaster的回答。 – 2012-04-16 09:57:44

+0

对,忘了那个。这不适用。虽然 – KooiInc 2012-04-16 10:04:55

0

某些浏览器会在您将其添加到DOM后立即初始化这些属性。它需要在DOM中才能应用CSS规则。

所以你不需要接收一个事件,只要在创建DOM时添加元素通常就可以工作。

但是,如果你找到你所需要的属性是立即初始化,您可以在代码中分离到另一个功能(就像你会为一个事件处理程序),它使用setTimeout(otherFunction, 0)无延迟调用。一旦JavaScript完成执行,浏览器将相应地响应您的DOM更改,然后立即调用您的其他函数。这就像有事件,但自己开火。