2009-11-30 4 views
2

드롭 다운 메뉴를 다시 채우려고합니다. myList를 검색하기 위해 아약스 호출을하고있다. 새 목록이 있으면 select 요소에서 모든 옵션을 제거하고 새 값 (약 100 개 옵션)을 삽입합니다. 이것은 IE와 Firefox의 최신 버전에서 잘 작동합니다; 새로 고침은 거의 순간적입니다. 그러나 IE6에서는 이러한 작업으로 인해 브라우저 속도가 느려집니다. 옵션이 제거되면 드롭 다운 상자가 거의 애니메이션으로 표시되며 몇 초 동안 계속됩니다. 이전 목록을 새 목록과 비교하고 변경된 항목 만 제거/추가하는 것 외에는 속도를 높이는 방법이 있습니까?IE6에서 select에서 옵션 제거

$("#myselect").children.remove(); 

$.each(myList, function(i, val) { 
    $("<option>").attr("value", val.myID) 
       .text(val.myText) 
       .appendTo("#myselect"); 
}); 
+3

컨트롤을 변경하는 동안 컨트롤을 숨겨서 변경 내용을 렌더링하지 않도록 할 수 있습니다. – NibblyPig

+0

Btw, $ ('mySelect'). children(). $ ('mySelect')를 사용하여 remove()를 대체 할 수 있습니다. –

답변

2

새 요소를 만들고 스위치를 끄면 어떻게됩니까? 코드가 훨씬 좋네요하지만 너무 느린 경우

var newSelect = $("<select></select>"); 
$.each(myList, function(i, val) { 
    $("<option>").attr("value", val.myID) 
       .text(val.myText) 
       .appendTo(newSelect); 
}); 
$("#myselect").replaceWith(newSelect); 
+0

그것이 작동해야하는 것처럼 들리는데, 그것은 파이처럼 단순 할 것입니다. 다시보고 할게. :) – Chris

+0

이것은 몇 초간 속도를 높이고 "움직이는"제거를 수정합니다. IE6는 여전히 조금 느리지 만 이것이 최고의 솔루션 인 것 같습니다. 감사! – Chris

2

는 직접 경로에 대한 이동 (내가 jQuery를 사용하기 전에, 과거에 그것을 한 적이, 그리고 IE6를 포함한 모든 브라우저에서 순간이었다). 그냥 html로 제거하여 선택의 모든 자식을 제거합니다

$("#myselect").html(''); 

을 그리고 당신은 각 옵션에 대한 HTML을 만들 수 있도록 루프를 수정하고

$('#myselect').html(optionsHTML); 

를 사용하여 선택에 삽입 성능에 따라, 당신은이 솔루션과 karim79의 솔루션 (즉, html()을 사용하여 옵션을 제거하고 평범한 HTML을 만드는 대신 배열을 사용하여 추가 할 수 있습니다.)을 시도해 볼 수 있습니다.

+0

select 요소를 날려 보내지 않아도되므로이 아이디어가 마음에 듭니다. .html ('')은 children.remove() 문제도 해결했습니다. – Chris

+0

IE8에서 $ ("# myListBox"). empty()가 Firefox의 30 밀리 초를 차지하는 목록 상자를 지우는 데 3 초 이상 걸리는 성능상의 문제가 해결되었습니다. 공평하게 말하면 2500 개가 넘는 항목이 있지만 성능의 크기 차이를 설명하지는 않습니다. – Nick

관련 문제