내가 잘 작동 몇 가지 코드를 가지고 있지만 너무 느린되고있다 :jQuery를 : 눈에 보이는 요소 계산 - 효율성/속도 문제를
HTML :
나는 약 50 ul
요소를 포함하는 컨테이너를 가지고있다. 각 ul
요소는 h4
표제 다음에 일련의 li
요소가옵니다. 이 함수는 표시되는 선 요소가없는 경우 표제를 숨 깁니다.
자바 스크립트/jQuery를 : 나는 li
요소의 특성을 변경할 때까지
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
은 <table><tr><td>icon</td><td>text</td></tr></table>
으로 구성된 미니 표가되었습니다. 이전에는 0.5 초도 채 걸리지 않았지만 이제는 처리하는 데 2 초가 걸립니다. (이 테이블은 아이콘 아래에 텍스트 줄 바꿈을 멈추게합니다.) li
에 추가 요소를 추가하면 DOM 처리 속도가 느려집니다. 이유는 .children
을 사용했기 때문에 이해할 수 없습니다. selector는 하나의 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
좋습니다, 감사합니다. 마크 업을 확인하고이 마크 업으로 돌아가겠습니다. – Nick