>  기사  >  웹 프론트엔드  >  JavaScript에는 함정이 있습니다. 특정 Area_javascript 기술의 모든 노드를 삭제합니다.

JavaScript에는 함정이 있습니다. 특정 Area_javascript 기술의 모든 노드를 삭제합니다.

WBOY
WBOY원래의
2016-05-16 18:27:37910검색

예를 들어 비교적 간단합니다.

영역이 있는데 이제 그 안의 모든 노드를 삭제해야 합니다. 많은 분들이 이렇게 쓰실 거라 믿습니다.

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

var divpanel = document.getElementById("newbody");
var controlinfo= divpanel.childNodes;
for(var index = 0;index < controlinfo.length ;index )
{
 divpanel. RemoveChild(controlinfo[index ]);
}

얼핏 보면 그렇죠, 그렇죠, 하나씩 순회하다가 결국 다 삭제됩니다. 하지만 잘 생각해보면 노드가 삭제될 때마다 controlinfo.length가 점점 작아지는데, 이것이 계속되면 모든 노드를 삭제할 수 없게 되는 버그가 있습니다. 그렇다면 어떻게 개선해야 할까요? 처음부터 시작하는 것이 불가능하기 때문에 이미 매우 명확합니다. 다음과 같이 완전히 올바른 끝부터 시작하겠습니다.
코드 복사 코드는 다음과 같습니다.

var divpanel = document.getElementById("newbody");
var controlinfo= divpanel.childNodes
for(var index = controlinfo.length - 1;index > = 0 ;index--)
{
 divpanel.removeChild(controlinfo[index])
}

디버깅, 매우 좋음 !

이런 종류의 함정은 JavaScript뿐만 아니라 기본적으로 C#, Java 등 모든 언어에서 발생하는 문제이며 때로는 이러한 문제로 인해 많은 시간을 낭비하게 됩니다. . 나는 이 문제에 대해 오랫동안 알고 있었지만 항상 내 기억을 너무 신뢰하고 제대로 기록하지 못했습니다. 이제는 나 자신에게 경고하고 모든 사람들과 공유하기 위해 기록합니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.