2016-11-14 9 views
0

画面に表示されない要素を「アンレンダー」する方法はありますか?
多くのdivを持つページがあり、その中にはイベントリスナーが付いているものもあります。 45k div以上のイベントハンドラは非常に遅く実行されているので、不必要な要素をアンレンダーして助けてくれると思いましたか?1ページに多くのdivがあります

FYI - 要素がdisplay: noneの場合、すべて正常に動作します。

+6

興味のあるものHTMLページは45KBのdivが必要ですか? – niico

+0

あなたはDOMを削除するか、DOMを隠すだけですか?それらを削除したい場合は、45k divをバイパスするコードもページを遅くします。 –

+4

1つの方法は、ページ上に45k divが存在しないように、ある種のページネゴシエーションを実装することです。 –

答えて

2

45kのイベントリスナーを追加する代わりに、parent-divに1つのイベントリスナーを追加する必要があります。

<div id="container"> 
    <div class="clickable">a</div> 
    <div class="clickable">a</div> 
    <div class="clickable">a</div> 
    <div class="clickable">a</div> 
    <div class="clickable">a</div> 
    <div class="clickable">a</div> 
    <div class="clickable">a</div> 
    <div class="clickable">a</div> 
</div> 

はjQueryのを使用すると、このような何かを行うことができます。

$("#container").on('click', '.clickable', function(e) { 
    console.log($(e.target)); 
}) 

これはあなたのJavaScriptコードを改善するはずです。

それはdivのがために使用されることになっているものだ(あなたはまだあなたが自分の位置を計算する必要があります表示されていない要素を非表示にする必要があり、あなたが分割する必要があるときには、あなたのperformence

+3

'$(e.target)'の代わりに '$(this)'を使います。 –

+0

@ Teemu理解していない限り:http://api.jquery.com/on/ "直接委任されたイベント" – TryingToImprove

+0

"まだ作成されていない子孫要素のイベントを処理する機能に加えて、委任されたイベントは、多くの要素を監視する必要がある場合、オーバーヘッドを大幅に減らす可能性があります。 " 例は同じですが、jQueryには組み込みがあります – TryingToImprove

0

使用divを減少させる可能性がある場合)セクションを相互に関連付けます。例えばコンテンツからのヘッダー/フッター、またはブログ上の個々の投稿。

ただし、他の要素が意味を成す意味的な意味で使用しないでください。これは重複していませんが、私はここにある情報はあなたに役立つと思います。 Too Many DIVS?

関連する問題