어제 DOM 구현의 단점에 관한 토론에 휘말 렸습니다. Text.splitText 및 Element.normalise 동작에 관해 흥미로운 질문이 제기되었고, 어떻게 동작해야하는지에 관해 알려졌습니다.ID를 부여하기 위해 DOM splitText와 normalize를 작성해야합니까?
DOM Level 1 Core에서이 Text.splitText은 형제로서 트리 내에 보존 지정된 오프셋 (offset)이 개 텍스트 노드에 ...로
휴식이 텍스트 노드를 정의한다. 이 노드에는 오프셋 포인트까지의 모든 내용 만 포함됩니다. 이 노드의 다음 형제로 삽입되는 새 Text 노드에는 오프셋 포인트 이후의 모든 내용이 포함됩니다. 표준화는
...
는 "정상"형식에만 마크 업 (예를 들어, 태그, 주석, 처리에이 요소 아래의 서브 트리의 최 심부까지 존재하는 모든 Text 노드를 넣습니다 명령어, CDATA 섹션 및 엔티티 참조)는 텍스트 노드를 분리합니다. 즉, 인접한 텍스트 노드가 없습니다. 이는 문서의 DOM보기가 저장되고 다시로드 된 것처럼 동일하고 특정 문서 트리 구조에 의존하는 작업 (예 : XPointer 조회)이 사용될 때 유용합니다.
그래서 textNode에서 참조에 "Hello World"를 포함하는 텍스트 노드를 가지고 가고, 할 경우,
textNode.splitText(3)
textNode 이제 내용에 "Hello"가, 새로운 형제는 "세계"를 포함하는
그때
textNode.parent.normalize()
textNode 어떤 경우? 이 스펙은 textNode가 이전 부모 노드의 자식 노드 여야한다는 것을 분명히하지 않고 인접한 모든 텍스트 노드를 포함하도록 업데이트됩니다. 인접한 모든 텍스트 노드를 제거한 다음 값을 연결 한 새 노드를 다시 작성하여 textNode가 더 이상 트리의 일부가 아닌 것을 가리키는 컨소시엄 동작 인 것으로 보입니다. 또는 splitText에서와 같은 방법으로 textNode를 업데이트 할 수 있으므로 트리 위치가 유지되고 새 값을 가져옵니다.
동작 선택은 실제로 매우 다르며 어느 것이 옳았는지에 대한 설명을 찾지 못했습니다. 또는 이것이 사양의 단순한 감독 일 수도 있습니다 (레벨 2 또는 3에서 명확하게 보이지 않는 것 같습니다.). 어떤 DOM/XML 전문가가 빛을 비출 수 있습니까?