W3C 호환 브라우저에서 JavaScript Range Object의 html 문자열을 가져 오는 방법이 있습니까?범위 또는 DocumentFragment를 문자열로 변환
예를 들어, 우리는 다음과 같은 사용자가 선택 가정 해 봅시다 : Hello <b>World</b>
Range.toString()
방법을 사용하여 문자열로 "안녕하세요"를 얻을 수 있습니다.
(파이어 폭스, 그것은. 문서의 getSelection
방법을 사용하여도 가능합니다)하지만 내부 HTML을 얻을 수있는 방법을 찾을 수 없습니다.
일부 검색 후에 범위를 DocumentFragment
개체로 변환 할 수 있음을 발견했습니다.
그러나 DocumentFragments
에는 innerHTML
속성이 없습니다 (적어도 Firefox에서는 Webkit 또는 Opera를 사용하지 않았습니다).
내게 이상한 것 : 선택한 항목에 액세스 할 수있는 방법이 있어야한다는 것이 분명해 보입니다.
documentFragment
을 만들고 다른 요소에 문서 조각을 추가 한 다음 해당 요소의 innerHTML
을 얻을 수 있다는 것을 알고 있습니다.
하지만이 방법은 내가 선택한 영역 내의 열려있는 태그를 자동으로 닫습니다.
게다가 문자열로 가져 오기 위해 DOM에 연결하는 것보다 확실한 "더 나은 방법"이 분명합니다.
그래서 Range 또는 DocFrag의 html 문자열을 얻는 방법은 무엇입니까?
범위이 문서 조각 (ISN '로 변환 될 때 종료 태그가 만들어 t는 맞습니까?). 그러나 범위에 무효 마크 업이 포함되어 있어도 노드로 변환되기 전에 해당 범위에 포함 된 것을 알아낼 수 있어야합니다 **. – SamGoody
나는 동의하지 않는다. 유효하지 않은 마크 업이 파싱되면 브라우저는이를 처리하지만 적합하다고 판단하고 브라우저 자체의 문서 표현 인 DOM에 적절한 노드를 만듭니다. 그 잘못된 마크 업은 적어도 DOM (자바 스크립트가 액세스 할 수있는 것)에 관한 한 기본적으로 버려집니다.DOM을 문자열로 생각하지 말고 나무로 생각하기 시작해야합니다. 끝 태그는이 트리를 HTML 문자열 (예 : 'innerHTML'을 통해)에 직렬화 한 결과입니다. 트리 안의 엔티티로 존재하지 않습니다. –