javascript - 在 javascript dom 操作后强制在 Internet Explorer 中刷新 DOM

标签 javascript internet-explorer dom

情况是这样的。我有一些如下所示的 JavaScript:

function onSubmit() {
    doSomeStuff();
    someSpan.style.display="block";
    otherSpan.style.display="none";
    return doLongRunningOperation;
}

当我将其设为表单提交操作并从非 IE 浏览器运行它时,它会快速交换两个跨度可见性并运行长 JavaScript 操作。如果我在 IE 中执行此操作,直到 onSubmit() 完全返回后才会进行交换。

我可以通过像这样粘贴警报框来强制 dom 重绘:

function onSubmit() {
    doSomeStuff();
    someSpan.style.display="block";
    otherSpan.style.display="none";
    alert("refresh forced");
    return doLongRunningOperation;
}

此外,明显的 jquery 重构不会影响 IE 行为:

function onSubmit() {
    doSomeStuff();
    $("#someSpan").show();
    $("#otherSpan").hide();
    return doLongRunningOperation;
}

此行为存在于 IE8 和 IE6 上。在这些浏览器中是否有强制重绘 DOM 的方法?

最佳答案

Mozilla(也许还有 IE)将缓存/延迟执行影响显示的 DOM 更改,以便它可以立即计算所有更改,而不是在每个语句后重复计算。

要强制更新(强制立即、同步重排或重新布局),您的 JavaScript 应读取受更改影响的属性,例如someSpan 和 otherSpan 的位置。

(视频 Faster HTML and CSS: Layout Engine Internals for Web Developers 中提到了 Mozilla 实现细节。)

关于javascript - 在 javascript dom 操作后强制在 Internet Explorer 中刷新 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1397478/

相关文章:

javascript - 数据名称(数据集)属性未正确报告

javascript - 任务取消异常 : a task was cancelled while rendering jsreport

css - IE8 中的不透明度不起作用

html - 使用 Internet Explorer 在表格单元格中定位绝对值

php - IE 的条件标签 - 如果浏览器是 IE,是否可以不加载 JS 文件?

php - 如何在 DOM 和 PHP 中获取文本节点?

javascript - 如何检查字段集中的任何表单元素是否具有焦点

javascript - 基于 Chrome 的 JavaScript 性能滞后

javascript - 在 Angular 4 中使用依赖注入(inject)扩展类

javascript - 页面部分上的 jQueryUI 或 BlockUI 模式对话框