Это может быть более общий вопрос о браузере / javascript, чем вопрос о конкретном прототипе, но я подумал, что лучше задать его здесь, потому что вы все, как правило, действительно понимаете 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
Это происходит очень часто в веб-наборе (Mac OS) и в веб-наборе iPhone, и я могу довольно легко воспроизвести его. Я построил что-то простое, что сделает это, но все это кажется мне немного сумасшедшим, потому что когда я смотрю на код других, они даже не принимают это во внимание. Они никогда не будут отображаться для элементов DOM при вставке текста HTML в элемент DOM.
Любые ответы / предложения будут очень полезны.
Киран