JQuery заменить с не работает на Google Chrome - PullRequest
2 голосов
/ 23 января 2012

Я столкнулся со странной проблемой с динамической заменой элементов управления с использованием JavaScript в Google Chrome.Замененные элементы управления не отображаются в пользовательском интерфейсе, но когда я использую инструменты разработчика, я могу найти замененный элемент, но он не отображается, пока я не закрою инструменты разработчика.как только я открываю и закрываю инструменты разработчика, проблема больше не реплицируется, пока я не обновлю страницу.

Это происходит только в тех случаях, когда я пытаюсь заменить externalHTML элемента.

Сначала я попытался использовать jquery's replaceWith api, это dint help, поэтому я переключился на следующий скрипт -

function chromeOuterHTML(oldElem, outerhtml)
{
var el = document.createElement('div');
el.innerHTML = outerhtml;
var parentNode = oldElem.parentNode;
var range = document.createRange();
        range.selectNodeContents(el);
        var documentFragment = range.extractContents();
        parentNode.insertBefore(documentFragment, oldElem);
        parentNode.removeChild(oldElem);
}

Я не думаю, что это проблема с моим javascript, так как проблема специфична для chrome и также происходит только в определенных случаях.

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 24 января 2012

Больше диагностический инструмент, чем решение, но вы пытались отложить вставку до?

function chromeOuterHTML(oldElem, outerhtml)
{
var el = document.createElement('div');
el.innerHTML = outerhtml;
var parentNode = oldElem.parentNode;
var range = document.createRange();
        range.selectNodeContents(el);
        var documentFragment = range.extractContents();
            setTimeout(function () {    
                parentNode.insertBefore(documentFragment, oldElem);
                parentNode.removeChild(oldElem);
    }, 1);
}

В некоторых ситуациях (которые я не до конца понимаю) манипуляции с DOM могут потерпеть неудачу, если они происходят слишком быстро.Эта модификация задержит (только на 1 мс) вставку - возможно, это будет иметь значение.Также возможно, что это ничего не сделает!

...