如何从jQuery中删除sizset和sizcache属性?

时间:2012-11-19 15:57:46

标签: jquery wysiwyg html sizzle

我已经知道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属性

3 个答案:

答案 0 :(得分:3)

使用.html()检索整个字符串后,

Use a regular expression

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));