私は正常に動作しますいくつかのコードを持っていますが、それはあまりにも遅くなっています:jQueryの:目に見える要素を数える - 効率/スピードの問題を
HTML:
私は約50 ul
の要素が含まれていた容器を持っています。各ul
要素にはh4
見出しが続き、一連のli
要素が続きます。表示されている行要素がない場合は、見出しが非表示になります。
Javascriptを/ jQueryの:
function show_or_hide_headings() {
$('#container').children('ul').each(function (i) {
var $this = $(this),
$h4 = $this.children(':first');
if ($this.children('li:visible').length) {
$h4.show();
} else {
$h4.hide();
}
});
}
私はli
要素の性質を変更するまで、それは非常に許容可能に働いていました。それぞれli
は、<table><tr><td>icon</td><td>text</td></tr></table>
を含むミニテーブルになりました。処理には2秒かかりましたが、以前は半分以下でした。
私は確信しています。li
に追加要素を追加すると、DOM処理が遅くなるのはなぜですか?私は.children
を使用しています。セレクタは1つのDOMレイヤだけを深く移動します。
私も試してみた:良い測定のための
$('#container').find('h4').each(function (i) {
var $this = $(this);
if ($this.siblings('li:visible').length) {
$this.show();
} else {
$this.hide();
}
});
と$('#container').children().children('h4')
を。
注目すべき点は、li
個の要素が多数表示されている場合、目に見える部分が非常に少ない場合よりもはるかに遅いことです。しかし、すぐに(つまり、テーブルが各行に置かれる前に)非常に速く作業していたときと比べて、今は行がなくなっています。
何かアドバイスは大歓迎、しかし、私は私が持っているよりも多くのコード:)
感謝を投稿依頼しないでください。
関連するマークアップのサンプルを投稿する必要があります。あなたが言っていることから、問題があります。 [UL](http://www.w3.org/TR/html5/the-ul-element.html#the-ul-element)は、** LIの子要素を持つことしかできません.H4は、あなたが思う構造を持たないように修正しました。また、LIのコンテンツをフォーマットするためのテーブルは不要ですが、CSSを使用してください。ああ、H4はLIを子ノードとして持つことはできません。彼らはULまたはOLの親を持たなければなりません。 – RobG
テーブルの代わりにnowrapはどうですか?また、他の方法の代わりに子供を隠すとき、なぜ親のh4を隠さないのですか? – mplungjan
OK、ありがとう。私はマークアップをチェックし、このマークアップに戻ります。 – Nick