我已经知道what sizcache and sizset attributes are,但我关心的是它们在我们的网络应用程序中的倍增。我解释说:我们使用jQuery开发了一个“自制的”WYSIWYG html编辑器,当我们的用户保存结果HTML时,我们使用.html()
(或innerHTML
)检索它,然后将其保存在数据库中。然后我们的用户可以编辑它,并再次保存在数据库中。当使用非IE浏览器时,一切都很好,但在IE中,jQuery添加了那些(ahemm nasty) sizset 和 sizcache 属性,它们最终出现在生成的HTML中。从数据库重新加载HTML并再次保存时,会添加越来越多的sizset和sizcache。
对我来说,理想的解决方案是这些属性永远不会在数据库中结束。如果首先有来自jQuery的解决方案,我不确定我是否要解析HTML服务器端以删除它们。有人遇到过这个问题吗?
以下是我们所拥有的一个例子:
HTML:
<div id="source">
<div sizset="37" sizcache09734513102453994="3" sizcache07081295255533577="350" sizcache0714455993494169="6324"></div>
... more html going on
</div>
Javascript:
var source = $('#source').html();
变量“source”最终包含sizset和sizcache属性
答案 0 :(得分:3)
.html()
检索整个字符串后,
var re = /\s*(sizset|sizcache)\d*="[^"]*"/gi;
source = source.replace(re,'');
http://jsfiddle.net/mblase75/fMdVc/
或者,jQuery有.removeAttr()
方法,但您必须将其应用于特定标记:
jQobj.removeAttr('sizset').removeAttr('sizcache');
答案 1 :(得分:1)
我最近将网站迁移到了运行 IIS 6 的新服务器。突然之间,网页的标题块插入了元标记<META content="IE=7.0000" http-equiv="X-UA-Compatible">
, sizset 和 sizcache 属性在IE浏览器下无处不在。然后我查看了IIS 6的设置,发现有一个自定义的http标头设置模拟IE7 那里强制它到客户端(IE)。删除该设置后,我的IE10浏览器的所有内容都恢复正常。
答案 2 :(得分:0)
I wrote a couple of little functions to cope with this。一个是一个简单的函数,它接受一个HTML字符串并删除crud( shizzle )。第二个是一个jQuery方法,它从选择中删除所述元素 - 将破坏IE6中的选择的某些jQuery选择器。 7 - 使用可选的布尔参数从所有子节点中删除。
请注意接受的答案中未涵盖的额外属性nodeIndex
。
var fizzleSizzle = function(x){
return x.replace(/(nodeIndex|sizcache|sizset)[\w\d]*(="[^"]*")*/gi,'');
};
(function($){
if(!$) return;
// Strip the shizzle from the DOM; pass a truthy argument to do the same for all children
$.fn.fizzleShizzle = function(deep){
var $el = deep ? this.add(this.find('*')) || this;
// Iterate through the selection
$el.each(function(){
var
el = this,
ats = el.attributes;
// Iterate through attributes
$.each(ats,function(i,x){
// Is it one of these?
if(/^nodeIndex|^sizcache|^sizset/.test(x))
// Fizzle it
el.removeAttribute(x);
});
});
return this;
};
}(jQuery));