2009-09-29 3 views
0

저는 자바 스크립트 실행 중에 DOM 조작을 줄이려고 노력하고 있습니다. DOM 요소를 게으른 방식으로 작성하는 것과 DOM의 큰 부분을 숨기고 나중에 필요한 부분을 숨기는 것에 대해 생각했습니다.jQuery는 xml을 수정함에 따라 컨텍스트 매개 변수로 사용되는 xml을 어떻게 저장합니까?

이렇게하려면 모든 DOM 컨텐츠를 JSP로 분리했습니다.이 JSP는 ajax를 통해 변수에로드하고 jQuery로 조작합니다. 그러나 jQuery가 DOM에서 숨겨진 div에서이 조작을 수행하는 경우 성능 향상을 달성하지 못했습니다. 도움?

답변

3

새로운 답변

나는 당신의 recentquestions의 몇 가지를 확인하고 난 당신이 여기 요구하는지 볼 생각합니다. 당신이를

jQuery(context).find('selector string') 

볼 수 있습니까 : 그것은이로 라우팅됩니다 당신이 $('selector string', context) 같은 jQuery를 호출

? context 인수는 jQuery에 대한 [sub] 호출의 첫 번째 인수가됩니다. 그 차례로 단축 코드의 배치로 라우팅됩니다 :

// Handle $(DOMElement) 
if (selector.nodeType) { 
    this[0] = selector; 
    this.length = 1; 
    this.context = selector; 
    return this; 
} 

그래서 context 인수는 .context 속성에 반환 jQuery 개체에 저장됩니다.

귀하의 의견을 this question (으)로 판단하면 서버 측 코드가 "Content-Type: text/xml" 헤더로 응답해야합니다. 이렇게하면 브라우저가 xml 응답 본문에서 DOMDocument 트리를 자동으로 생성하도록 지시합니다. responseXML propertyXMLHttpRequest 개체 자체에서 액세스 할 수 있습니다. jQuery는이를 사용자의 success 처리기로 전달하기 만합니다.

귀하의 질문에 대답하기 : 당신이 context 매개 변수 으로 jQuery를에에이 DOMDocument 객체를 전달하면이 객체에 속성을 수정로 진행이 당신이 걱정할 필요가 숨겨진/일시 div에는 조작하지 약. DOMDocument은 제자리에서 돌연변환 된 것입니다.

귀하의 질문에 대한 답변입니다.


원래 대답 : 당신은 문자열에서 HTML을 가지고 당신이 DOM 구조의 노드 수를해야하는 경우

, 당신은 어떻게 든 변환 할 수있어. 모함 요소 내부를 두는 것은 활용하면서 내가이 일을 알고있는 유일한 방법입니다 내장 된 브라우저 파서 : 라이브러리의

// HTML string 
var s = '<span>text</span>'; 

var div = document.createElement('div'); 
div.innerHTML = s; 
var elements = div.childNodes; 

많은 사람들이 더 많거나 jQuery를 포함, 덜 않습니다. 기분이 나아진다면 위의 div은 DOM에 삽입되지 않으므로 DOM reflow (매우 비싼 작업)을 피할 수 있으며주기가 절약됩니다.

+0

새 답 = $. –

+0

+1 - 훌륭한 탐정 작업으로 누락 된 지식이 누락되었습니다. –

+0

@Russ : 감사합니다. 어제 OP에 대한 몇 가지 질문에 답변 했으므로 그의 생각이 다소 익숙했습니다. –

0

document fragments을 컨테이너로 생성하여 생성 된 DOM 노드를 보관할 수 있습니다.

var fragment = document.createDocumentFragment(); 
for (var e = 0; e < elems.length; e++) { 
     // append elements to fragment 
     fragment.appendChild(elems[e]); 
}