5

sizcache属性とsizset属性が何であるかはすでに知っていますが、私の懸念は、Webアプリケーションでのそれらの乗算についてです。説明:jQueryを使用して「自家製」のWYSIWYG htmlエディターを開発し、ユーザーが結果のHTMLを保存するときに、.html()(またはinnerHTML)で取得してデータベースに保存します。その後、ユーザーはそれを編集して、データベースに再度保存できます。IE以外のブラウザーを使用する場合、すべてが正常ですが、IEでは、jQueryはそれらの(厄介な)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();

変数「ソース」には、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

最近、Web サイトをIIS 6を実行する新しいサーバーに移動しました。突然、Web ページのヘッダー ブロックにメタ タグが挿入され、<META content="IE=7.0000" http-equiv="X-UA-Compatible">sizsetおよびsizcache属性が IE ブラウザのいたるところに配置されます。次に、IIS 6 の設定を調べたところ、 IE7 をエミュレートするためのカスタム http ヘッダー設定があり、クライアント (IE) への道を強制することがわかりました。その設定を削除すると、IE10 ブラウザーですべてが正常に戻ります。

于 2013-06-11T11:02:54.127 に答える
0

これに対処するためにいくつかの小さな関数を書きました。1 つは、HTML 文字列を受け取り、クラッド ( shizzle ) を削除する単純な関数です。2 つ目は、上記の要素を選択から削除する 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 に答える