這可能是一個更通用的瀏覽器/ JavaScript問題比原型特定quesiton,但我認爲這將更好地問在這裏,因爲你們都傾向於真正理解JavaScript和瀏覽器在很多細節。所以在這裏。插入,推遲,原型和追加元素
如果我執行下面的代碼:
HTML:
的Javascript:
$('area').insert({bottom: "<div id="inserted"></div>"});
var count = 0;
var f = function() {
if ($('inserted') == null) {
console.log("not there");
count++;
if (count > 50) {
$('area'.insert({bottom: "<div id="inserted"></div>"});
count = 0;
}
f.defer();
} else {
console.log("there");
}
};
f();
結果:
大多數的它只是顯示的時間:
there
,但它的一些做這個
not there
not there
not there
there
我假設,因爲插入的東西是排隊,然後在瀏覽器中插入的節點進入時間在其下一個事件循環中的DOM。我知道webkit是單線程的,所以這是有道理的,有時它不在那裏,然後它到達那裏,所以真的我想我必須等到它那裏之前,我可以做的插入節點上的「下一件事」。那麼Firefox和IE呢?它們是否都是單線程的? Chrome中會發生什麼?
有時候,我看到下面還發生這實在是關於對我說:
not there
not there
... 50 times
not there
there
它發生,每隔一段時間WebKit的(Mac OS)並在iPhone上的WebKit,我可以很容易地複製它。我已經構建了一些簡單的操作,但這一切似乎對我來說都有點瘋狂,因爲當我查看其他代碼時,它們甚至不考慮這一點。將HTML文本插入DOM元素時,他們決不會顯示DOM元素。
任何答案/建議將是超級有用的。
Kiran
Firefox和其他都是單線程的。你應該像這樣聲明你的函數:function f(){... – 2009-10-30 09:00:33
這是正常的,你的代碼中有語法錯誤嗎? DOM準備好後執行f()嗎? document.observe(「dom:loaded」,f); – 2009-10-30 09:03:09