2016-06-16 2 views
2

문서의 HTML 소스를 문자열로 사용하고이 문자열에서 요소가 시작되는 색인 i이 있습니다.문서의 HTML에서 DOM 요소의 문자열 색인을 가져옵니다.

페이지의 HTML 문자열에서 i 위치에있는 요소에 해당하는 JavaScript DOM 객체를 반환하는 함수 getElementByIndex(i)이 필요합니다.

> var markup = document.documentElement.innerHTML; 
> markup 

    "<head></head><body><div id="a"></div><div id="b"></div></body>" 

> getElementByIndex(19)  // 19 is the index of the first div's 
           // '<' character in the markup string 

    <div id="a"></div> 

> getElementByIndex(19) === document.getElementById("a") 

    true 

> getElementByIndex(19) === document.getElementById("b") 

    false 
+0

'getElementByIndex'에서 기대하는 것이 확실하지 않습니까? 마크 업과 관련이 있습니까? – Rayon

+0

문자열 '

'은 마크 업 문자열에서 위치 19에서 시작합니다. 그것은'getElementByIndex'가 무엇을해야하는지 명확히합니까? –

+0

'strng'의'index'? – Rayon

답변

0
function getElementByIndex(htmlString, tagName, index) { 
    var numOfEleBefore = htmlString.substr(0, index).split('<' + tagName).length - 1; 
    return element = document.getElementsByTagName(tagName.toUpperCase())[numOfEleBefore] 
} 

당신이 시도 할 수 있지만, 몇 가지 가정을이 :

  1. 있는 HTML이 하나의 문자열로 축소 된해야

    예를 들어, 나는 다음과 같은 행동을 기대

  2. 찾으려는 태그의 유형을 알고 계신가
  3. html 정확히은 # 1에 언급 된 축소 된 문자열, 태그의 공백 수 및 각 태그에 할당 된 속성을 모방합니다. 단일 공간처럼 실패합니다.
+0

아쉽게도 태그에 ID가 없을 수 있습니다.이것이이 기능을 구현하는 데 많은 어려움을 겪고있는 이유입니다. 태그에 ID가 있으면 간단히'document.getElementById'를 사용하여 솔루션에서했던 것처럼 원하는 객체를 얻을 수 있습니다. –

+1

원하는 요소 앞에 얼마나 많은 같은 요소가 있는지 알았다면'getElementsByTagName'을 사용하여 요소를 가져올 수 있습니다 ('html' 문자열의 부분 문자열에'split'을 사용하여 계산할 수 있습니다). 주어진 인덱스의 시작). – Ike10

+0

요소 개체의 all 속성은 모든 자식 요소 목록입니다. –