2014-11-17 3 views
1

기본적으로 일부 html 문자열에서 함수를 호출하고 해당 항목의 시작 및 끝 인덱스 배열을 가져올 수 있기를 원합니다. 그것은 콘솔에서 다음과 같이 보일 것이다 :이 일의 최종 목표는 훨씬의 CTRL + F 기능과 같은 문서에서 검색 할 문자열 주어진 몇 가지 태그를 HTML을 마무리 할 수있을 것입니다 스트립 된 후 특정 문자열을 생성하는 html 부분을 어떻게 얻을 수 있습니까?

var html = "<b>Hello</b>&nbsp;<mark>World</mark>"; 
> getIndices(html, "Hello\u00A0World"); 
< [[3, 29]] 

대부분의 브라우저가 그렇습니다.

필자는 코드 스 니펫을 아래에 작성했지만, 성능은 끔찍합니다. 특별히 긴 웹 페이지에서 전체 본문의 내부 HTML을 호출 할 때 그렇습니다. 이 코드는 무차별 대항 (brute force)과 반대되는 바이너리 검색을 통해 최적화 될 수 있으며 다른 것들은 약간 다르게 처리하지만 구현하는데 문제가 있습니다. 이것에 대한 생각?

function getIndices(html, searchTerm){ 
    var i = 0, 
     indices = []; 
    while(html.slice(i).replace(/<[^>]*>/g, '').indexOf(searchTerm) !== -1){ 
     i = html.indexOf(searchTerm[0], i); 
     if(html.slice(i).replace(/<[^>]*>/g, '').indexOf(searchTerm) === 0){ 
      indices.push(i); 
     } 
     i++; 
    } 
    return indices; 
} 

고마워요!

답변

1

treewalker를 만들고 어떤 노드에 검색 문자열이 포함되어 있는지 확인하십시오.