我有一些代碼,工作正常,但它已經成爲太慢: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
選擇器只能深入一個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-元素)只能**具有LI子元素,H4是錯誤的,糾正,所以你沒有你認爲你的結構。此外,用於格式化LI的內容的表是不必要的,請使用CSS。哦,並且H4不能將LIs作爲子節點,它們必須具有UL或OL父級。 – RobG 2012-07-10 05:30:38
nowrap而不是table?另外,爲什麼不隱藏父母h4而不是以其他方式隱藏孩子? – mplungjan 2012-07-10 05:31:04
好的,謝謝。我會檢查標記並回到這一個。 – Nick 2012-07-10 05:36:30