1

私はこの行に気づきました

    $('#opp-tabs input[type=text]:not(#newActionText), #opp-tabs textarea').live('keyup', function() {
        onFormChanged();
    });

IE8では非常に低速で動作します。Firefoxとchromでは正常に動作しますが、IEでは正常に動作しません。正直なところ、これは「not」という単語のcosです。これを、IEで通常の速度で実行するように定義するにはどうすればよいですか。

4

2 に答える 2

4

特にメソッドで使用する場合は、セレクターが可能な限り軽量であることを確認する必要があり.live()ます。そこで何が起こるかというと、イベントは実際ににバインドされdocument.body、特定のイベントが元のセレクター文字列と一致するかどうかをそこでチェックする必要があります。このプロセスはかなり費用がかかる可能性があり、あなたの場合はSizzle **を呼び出す必要もあり、これによりさらに遅くなります。

最良の解決策は、必要なDOMバブリングを使用.on()または制限することです。.delegate()つまり、イベントハンドラーをにバインドするのではなくbody最も近い共有の親ノードにバインドすることで、全体的なパフォーマンスが向上します。第二に、より重要なのは、そのセレクターを改善することです!

クラス名などを使用して、必要なノードを照会します。実際には、現在の状態よりもはるかに悪くなることはありません。

現在のフォームを最適化するには、次のように試してください。

$('#opp-tabs input:text, #opp-tabs textarea').not('#newActionText').on('keyup', 'closest shared parent selector', function() {});

参照:.delegate().on()

**SizzleはjQueryのjavascriptcss-selectorエンジンです

于 2012-10-09T10:30:55.530 に答える
1

@jAndyの答えに加えて、これを次のように表すことができます

$('#opp-tabs input[type=text], #opp-tabs textarea').live('keyup', function() {
    if(this.id != "newActionText") onFormChanged();
});
于 2012-10-09T10:33:00.770 に答える