표에 행을 삽입하십시오
-
03-07-2019 - |
문제
IE의 X 행을 테이블에 삽입하는 가장 일반적인 JavaScript 방법은 무엇입니까?
테이블 html은 다음과 같습니다.
<table><tbody id='tb'><tr><td>1</td><td>2</td></tr></tbody></table>
내가해야 할 일은 오래된 몸을 떨어 뜨리고 1000 줄의 새 몸을 삽입하는 것입니다. JavaScript 문자열 변수로 1000 행이 있습니다.
문제는 IE의 테이블에 내부 기능이 없다는 것입니다. 나는 그것을 할 수있는 많은 해킹을 보았지만 당신의 최선을보고 싶습니다.
참고 : jQuery 또는 다른 프레임 워크를 사용하는 것은 계산되지 않습니다.
해결책
IE 's를 구현 한 사람의 훌륭한 기사는 다음과 같습니다. innerHTML=
~에 그가 어떻게해야했는지 tbody.innerHTML="<tr>..."
:
처음에는 IE가 InnerHTML로 수정 된 테이블에 대한 Redraw를 수행 할 수 없다고 생각했지만이 제한에 대한 책임이 있다는 것을 기억했습니다!
우연히 그가 사용하는 트릭은 기본적으로 모든 프레임 워크가 수행하는 방식입니다. table
/tbody
집단.
편집하다: @mkoryak, 당신의 의견은 당신이 상상력이없고 대답을받을 자격이 없다고 말합니다. 하지만 어쨌든 당신을 유머 할 것입니다. 요점 :
> 그는 내가 필요한 것을 삽입하지 않습니다
WHA? 그는 (HTML 스트링으로서) 행을 삽입하고 있습니다. table
요소.
> 그는 또한 추가 숨겨진 요소를 사용합니다
그 요소의 요점은 모든 IE 요구가 "컨텍스트"라는 것을 설명하는 것이 었습니다. 대신 즉시 생성 된 요소를 사용할 수 있습니다 (document.createElement('div')
).
> 또한 기사가 오래되었습니다
나는 다시는 당신을 돕지 않습니다;)
그러나 진지하게, 다른 사람들이 그것을 구현 한 방법을보고 싶다면 jQuery 소스를 살펴보십시오. jQuery.clean()
, 또는 프로토 타입 Element._insertionTranslations
.
다른 팁
jQuery가하는 것처럼, 예를 들어. 추가하다 <table>
그리고 </table>
그 주위에 문서에 삽입하고 원하는 노드를 원하는 위치로 이동하고 온도 요소를 버립니다.
코드는 다음과 같습니다.
if($.support.scriptEval){
//browser needs to support evaluating scripts as they are inserted into document
var temp = document.createElement('div');
temp.innerHTML = "<table><tbody id='"+bodyId +"'>"+html;
var tb = $body[0];
tb.parentNode.replaceChild(temp.firstChild.firstChild, tb);
temp = null;
$body= $("#" + bodyId);
} else {
//this way manually evaluates each inserted script
$body.html(html);
}
미리 존재하는 것들 : 'bydid'의 신체가있는 몸체가있는 테이블. $ body는 글로벌 변수 (또는 함수가 폐쇄 된)이며, 즉, HTML에 삽입되는 스크립트를 평가하지 않기 때문에 약간의 jQuery도 있습니다.
나는 같은 문제를 겪었고 (많은 다른 사람들과 마찬가지로) 많은 일을 한 후에는 내가 일해야 할 일이 있습니다.
문서를 통해 TR을 만들어야합니다 .CreateElement ( 'tr')는 같은 방식으로 TD를 만들어야합니다. tr에 td를 부여하고, tr to t body (테이블이 아님)를 부여하면 당신은 당신이 만든 td를 내부 할 수 있으며 작동합니다. 이것은 내가 사용했던 ie8입니다. 기본적으로 테이블 구조는 CreateElement를 사용하여 만들어야하지만 나머지는 내부에 적합 할 수 있습니다. 나는 IE8 디버거 에서이 시청을하고 있었고 그것을 추가 할 것이라고 말할 것입니다 (내가 tr.innerhtml = "blah"를했다면) 오류가 표시되지 않지만 표시되지 않을 것입니다. 테이블 (TD는 나타나지 않았지만 /td는 그랬습니다)
따라서 마침내 CreateElement 호출로 TR과 TD를했을 때 올바른 모습을 만들었고 페이지를 올바르게 그렸습니다.