与FV或GoogleChrome相比,IE中DOM元素的替换速度较慢
Replacing DOM element slow in IE compared to FV or GoogleChrome
我正在使用的应用程序需要快速响应。客户端应该通过填写表单来创建配置。表单上的每次修改都会将表单发送到服务器进行验证。服务器以一个新的HTML页面作为响应。然后在浏览器中呈现页面。我的任务是将Ajax添加到这个过程中,以便改进用户体验。以下是我迄今为止所做的:
function doSubmitWithAjax(){
var datum = $('#hiddenvars').serialize();
var ajax=$.ajax({
type : 'POST',
url : 'frontend',
cache : false,
dataType : 'html',
data : datum
});
ajax.success(function(XHR,text,jqXHR){
var dom = document.createElement('div');
dom.innerHTML=XHR;
var bod = $('#hiddenvars',dom);
$('#hiddenvars').replaceWith(bod);
});
ajax.error(function(jqXHR, textStatus, errorThrown){
alert('request error '+errorThrown);
});
}
XHR是从服务器接收的HTML页面。基本上,我只想检索表单(#hiddenvars)并将其放置在DOM中,而不是已经存在的表单。
每当表单发生更改时,就会触发函数doSubmitWithAjax()
。目前的实现适用于Firefox和Chrome。IE的响应时间太长。我使用了一些工具来检查什么东西需要这么长时间,结果发现replaceWith()
比FF(0.2秒)慢(1.3秒)。
我的问题是:如何提高IE的响应时间?我可以用什么代替replaceWith()?我尝试过:$('#hiddenvars').empty().replaceWith(bod);
,因为我不需要DOM中被替换的表单,但仍然很慢。
谢谢!
在我看来:
var bod = $('#hiddenvars',dom);
$('#hiddenvars').replaceWith(bod);
将hiddenvars替换为自身。看看下面的东西是否更快:
var x = document.getElementById('hiddenvars');
var p = x.parentNode;
p.innerHTML = '';
p.appendChild(x);
p.appendChild(bod);
您可能还想保留对bod的引用,因此每次只替换其内容,而不是每次删除和插入hiddenvars。
编辑
不幸的是,你不能在元素上使用getElementById,你需要筛选dom的内容才能找到它。使用dom.getElementsByTagName('form')
至少意味着你只需要筛选表单,例如
var form, forms = bod.getElementsByTagName('form');
var i = forms.length;
while (i-- && !form ) {
if (forms[i].id == 'hiddenvars') form = forms[i];
}
if (form) {
var x = document.getElementById('hiddenvars');
x.parentNode.replaceChild(form, x);
}
相关文章:
- 只要存在,就用另一个元素替换一个元素
- 用HTML元素替换字符串的一部分
- 将父元素替换为其内容
- 单击时将SVG元素替换为另一个
- 用javascript(无jquery)将元素替换为文本
- 在不同的html文件中将html从一个元素替换为另一个元素
- 如何用另一个元素替换一个元素
- 将所有元素替换为另一个 jquery
- 使用本机 JS 将 HTML 元素替换为字符串内容
- 将 DOM 元素替换为仅开始标记(或结束标记)
- JQuery 将表单元素替换为文本
- 如何将 html 元素替换为 ajax 响应
- 将数组中的元素替换为相应的字典项 JavaScript
- JQuery:用另一组元素替换一组元素的优雅方式
- 将内容可编辑元素替换为有序列表时保持可编辑性
- 用新的克隆元素替换克隆元素
- 用新的DOM元素替换()任意文本
- 如何为没有ID的元素替换类名
- 如何使用regex将段落元素替换为新行
- 是否可以用另一个td元素替换HTML表td元素