Tôi có một số mã mà hoạt động tốt nhưng nó trở nên quá chậm:jQuery: đếm các yếu tố có thể nhìn thấy - hiệu quả/vấn đề tốc độ
HTML:
Tôi có một container chứa khoảng 50 ul
yếu tố. Mỗi thành phần ul
có tiêu đề h4
theo sau là một loạt các phần tử li
. Chức năng ẩn tiêu đề nếu không nhìn thấy các phần tử đường kẻ.
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();
}
});
}
Nó được làm việc khá chấp nhận được cho đến khi tôi đã thay đổi bản chất của li
yếu tố. Mỗi li
giờ đây là một bảng nhỏ bao gồm <table><tr><td>icon</td><td>text</td></tr></table>
. Bây giờ nó mất 2 giây để xử lý, trong khi nó đã làm việc trong chưa đầy nửa giây. (Bảng ở đó để dừng gói văn bản dưới biểu tượng.)
Tôi thú nhận tôi không thể hiểu tại sao việc thêm các phần tử bổ sung vào mỗi li
sẽ làm chậm quá trình xử lý DOM rất nhiều vì tôi đã sử dụng .children
bộ chọn để chỉ đi sâu một lớp DOM.
Tôi cũng đã thử:
$('#container').find('h4').each(function (i) {
var $this = $(this);
if ($this.siblings('li:visible').length) {
$this.show();
} else {
$this.hide();
}
});
và $('#container').children().children('h4')
cho biện pháp tốt.
Điều đáng chú ý là khi có nhiều thành phần hiển thị, nó sẽ chậm hơn nhiều so với khi có thể nhìn thấy một vài phần tử. Tuy nhiên, không có nhiều dòng nào hơn khi nó hoạt động khá nhanh (tức là, trước khi bảng được đưa vào mỗi dòng).
Bất kỳ lời khuyên nào được đánh giá cao, nhưng vui lòng không yêu cầu tôi đăng nhiều mã hơn tôi có :)
Cảm ơn.
Bạn cần đăng một ví dụ về đánh dấu có liên quan, từ những gì bạn đã nói, nó có vấn đề. Một [UL] (http://www.w3.org/TR/html5/the-ul-element.html#the-ul-element) có thể ** chỉ ** có phần tử con LI, H4 là lỗi- sửa chữa để bạn không có cấu trúc bạn nghĩ bạn làm. Ngoài ra, bảng để định dạng nội dung của LI là không cần thiết, hãy sử dụng CSS. Oh, và H4 không thể có LI là nút con, chúng phải có cha mẹ UL hoặc OL. – RobG
Làm thế nào về nowrap thay vì bảng? Ngoài ra tại sao không giấu h4 cha mẹ khi bạn ẩn các trẻ em thay vì cách khác xung quanh? – mplungjan
OK, cảm ơn. Tôi sẽ kiểm tra đánh dấu và lấy lại cái này. – Nick