문제

어제 DOM 구현 문제에 대한 토론에 휩싸 였고 Text.splitText 및 Element.normalise 동작에 대한 흥미로운 질문과 그 동작 방식에 대한 흥미로운 질문이 생겼습니다.

DOM 레벨 1 Core , Text.splitText는 다음과 같이 정의됩니다 ... <인용구>

이 Text 노드를 지정된 오프셋에서 두 개의 Text 노드로 나눠 트리에서 둘 다 형제로 유지합니다. 이 노드는 오프셋 지점까지의 모든 콘텐츠 만 포함합니다. 이 노드의 다음 형제로 삽입되는 새 텍스트 노드에는 오프셋 지점과 그 이후의 모든 콘텐츠가 포함됩니다.

정상화 란 ... <인용구>

이 요소 아래에있는 하위 트리의 전체 깊이에있는 모든 텍스트 노드를 마크 업 (예 : 태그, 주석, 처리 명령, CDATA 섹션 및 엔티티 참조) 만 텍스트 노드를 분리하는 "일반"형식으로 만듭니다. , 인접한 텍스트 노드가 없습니다. 이것은 문서의 DOM보기가 마치 저장되고 다시로드 된 것과 동일한 지 확인하는 데 사용할 수 있으며 특정 문서 트리 구조에 의존하는 작업 (예 : XPointer 조회)을 사용할 때 유용합니다.

그래서 textNode에서 참조하는 "Hello World"를 포함하는 텍스트 노드를 가져 와서 수행하면 라코 디스

textNode는 이제 "Hello"라는 컨텐츠와 "World"를 포함하는 새로운 형제를가집니다.

그럼 라코 디스

textNode 란 무엇입니까 ? 사양은 textNode가 여전히 이전 부모의 자식이어야한다는 것을 명확하게하지 않으며, 모든 인접한 텍스트 노드를 포함하도록 업데이트되었습니다 (그런 다음 제거됨). 인접한 모든 텍스트 노드를 제거한 다음 값을 연결하여 새 노드를 다시 만들고 textNode가 더 이상 트리의 일부가 아닌 것을 가리 키도록하는 것은 순응적인 동작 인 것 같습니다. 또는 splitText와 동일한 방식으로 textNode를 업데이트하여 트리 위치를 유지하고 새 값을 얻을 수 있습니다.

행동의 선택은 매우 다르며 어느 것이 옳은지에 대한 설명을 찾을 수 없거나 이것이 단순히 사양에 대한 감독 인 경우 (레벨 2 또는 3에서는 명확하지 않은 것 같습니다) . 어떤 DOM / XML 전문가가 빛을 발할 수 있습니까?

도움이 되었습니까?

해결책

저는 초기에 DOM 워킹 그룹에있었습니다.textNode가 새로운 결합 된 값을 포함하는 것을 의미 하지만 사양에서 하지 않았다면 일부 em> 구현은 textNode를 재사용하는 대신 새 노드를 만들 수 있습니다 , 구현 자에게 더 많은 작업이 필요합니다.

의심스러운 경우 방어 적으로 프로그램하세요.

다른 팁

합리적인 가정처럼 보이지만 사양에 명시 적으로 명시되어 있지 않다는 데 동의합니다.내가 추가 할 수있는 것은 내가 읽는 방식, textNode 또는 새로운 형제 (예 : splitText의 반환 값) 중 하나에 새로 결합 된 값이 포함된다는 것입니다.이 명령문은 하위 트리의 모든 노드 를 지정합니다.em>은 하위 트리가 새로운 구조로 정규화되는 것이 아니라 일반 형식으로 배치됩니다.유일하게 안전한 것은 정상화하기 전에 부모에 대한 참조를 유지하는 것입니다.

모든 베팅이 여기서 해제 된 것 같습니다.나는 어떤 행동에도 의존하지 않을 것입니다.안전한 유일한 방법은 부모로부터 노드를 다시 가져 오는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top