> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 비동기 innerHTML 사용 분석_javascript 기술

JavaScript 비동기 innerHTML 사용 분석_javascript 기술

WBOY
풀어 주다: 2016-05-16 18:38:21
원래의
1691명이 탐색했습니다.

물론, 이 시분할 로딩 기술은 보조 기술일 뿐 노드를 추가하는 기능은 없습니다. 요즘에는 또 다른 독특한 기술 비동기 innerHTML이 다시 개발되었습니다. 이 분야에 대한 연구는 외국인들이 매우 앞서 있다는 점을 칭찬하지 않을 수 없습니다.

코드 복사 코드는 다음과 같습니다.

function asyncInnerHTML(HTML, callback) {
var temp = document.createElement('div'),
frag = document.createDocumentFragment();
temp.innerHTML = HTML;//추가할 콘텐츠가 먼저 여기에 배치됩니다.
(function(){
if(temp.firstChild) {
frag.appendChild(temp.firstChild);//그런 다음 조금씩 문서 조각으로 이동
setTimeout(arguments.callee, 0) ;//비동기 호출을 사용하여 div 노드가 비워질 때까지 문서 조각을 직접 조각화합니다.
} else {
callback(frag);//여기서 노드를 삽입하는 실제 작업이 수행됩니다.
}
})();
}

이 기술의 장점:
1. IE6의 메모리 오버플로 문제를 해결하려면
2. (fn,0) 해킹은 브라우저가 애니메이션을 정지하는 것을 방지하기 위해 작업을 대기열 밖으로 끌어냅니다
3. 문서 조각을 사용하여 페이지 렌더링 수를 줄입니다
4를 사용하여 콜백 노드를 삽입할 수 있습니다. DOM 표준 메소드(appendChild)(예: IE의 table, tbody의 innerHTML, tr, td 및 기타 태그는 읽기 전용입니다.)
사용법:
코드 복사 코드는 다음과 같습니다.

var htmlStr = '

...

.. .

...
';
asyncInnerHTML(htmlStr, function(fragment){
// 'fragment'를 일반으로 처리할 수 있습니다. node.
document.body.appendChild(fragment);
})

그러나 이 방법은 테이블에 노드를 추가할 때 모든 브라우저에서 작동하지 않습니다. 큰 실패였다고 합니다. IE8, IE6, FF3.5에서는 렌더링 오류가 있는 것으로 테스트되었으나, chrome, safari4, Opera10 등에서는 테이블을 완벽하게 렌더링할 수 있습니다. IE8 등이 노드를 문서 조각으로 전송할 때 노드 손실이 발생하는 것으로 추정됩니다.

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

在FF3.5的firebug显示下,table新添加的节点,标签都丢失了。
flagment
在IE8的开发人员工具中,我们发现table新添加节点出错严重,见于IE一惯的表现,这是很正常的事!
flagment
相关演示可见无忧的贴子,发现这种方法不是最佳的插入动态内容的方法。
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿