5

我已经知道sizcache 和 sizset 属性是什么,但我担心的是它们在我们的 Web 应用程序中的乘法。我解释说:我们使用 jQuery 开发了一个“自制”的 WYSIWYG html 编辑器,当我们的用户保存结果 HTML 时,我们用.html()(或innerHTML) 检索它,然后将其保存在数据库中。然后我们的用户可以编辑它,并再次保存在数据库中。当使用非 IE 浏览器时,一切都很好,但是在 IE 中,jQuery 添加了那些(ahemm nasty)sizsetsizcache属性,它们最终出现在生成的 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();

变量“源”最终包含 sizset 和 sizcache 属性

4

3 回答 3

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');
于 2012-11-19T16:03:34.453 回答
1

我最近将一个网站移到了运行IIS 6的新服务器上。一下子,网页的Header块插入了一个meta标签<META content="IE=7.0000" http-equiv="X-UA-Compatible">,在IE浏览器下到处都是sizsetsizcache属性。然后我查看了 IIS 6 设置,发现那里有一个用于模拟 IE7的自定义 http 标头设置,它强制其进入客户端(IE)。删除该设置后,我的 IE10 浏览器一切恢复正常。

于 2013-06-11T11:02:54.127 回答
0

我写了几个小函数来解决这个问题。一个是一个简单的函数,它接受一个 HTML 字符串并删除杂物(shizzle)。第二个是从选择中删除所述元素的 jQuery 方法 -这将破坏 IE6 和 7 中该选择的某些 jQuery 选择器- 带有一个可选的布尔参数也可以从所有子节点中删除。

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));
于 2013-03-22T18:13:32.967 回答