2013-05-06 2 views
1

사용자가 텍스트를 강조 표시하고 해당 텍스트를 반환 할 수있는 기능을 포함하려고합니다. #textcontainer div 내에 해당 텍스트의 위치를 ​​반환하고 싶습니다.자바 스크립트에서 문자열의 위치를 ​​반환하는 방법은 무엇입니까?

내 문제 : 사용자가 아래 텍스트에서 두 번째 'and'를 강조 표시하면 position은 두 번째 대신 div의 첫 번째 'and'indexOf와 같습니다. 위치를 두 번째 '및'(강조 표시된 위치)의 위치로 되돌리려면 어떻게 변경합니까?

var selection = window.getSelection(); 
var range = selection.getRangeAt(0); 

var start = range.startOffset, end = range.endOffset; 

편집 : IE가 가지고있는window.getSelection() 차례로 당신과 같이 사용할 수있는 getRangeAt 방법을 가지고 Selection 객체를 반환 이후

<div id = 'textcontainer'> 
     and second third and 
    </div> 


    // beginning of highlight js 
    $('#highlight').click(function (e) { 
     e.preventDefault(); 

     // get highlighted text 
     var selection = window.getSelection(); 
     var txt = selection.toString(); 
     console.log(txt); 

     fulltext = $("#textcontainer").text(); 
     console.log(fulltext); 

     position = fulltext.indexOf(txt); 
     console.log(position); 

    }) 
    // end of highlight js 
+2

[Selection # getRangeAt] (https://developer.mozilla.org/en-US/docs/DOM/Selection/getRangeAt) 및 [Range] (https : // developers. mozilla.org/en-US/docs/DOM/range)? –

+0

은 단어를 배열에 넣고 배열에서 두 번째 항목을 검색 할 수 있습니다. 아마도 첫 번째 항목의 색인을 얻은 다음 해당 단어의 끝에서 문자열을 분할하여 (즉, index + word.length) 문자열의 나머지 부분을 검색하는 것이 좋습니다. 정규식 일치를 사용할 수도 있습니다. – sgroves

+0

@JeremyRoman IE 지원은 어떻게됩니까? 아래의 대답은 getRange가 IE에서 작동하지 않는다는 것을 언급합니다. 브라우저 간 사용을 위해 사용할 수있는 jQuery의 내용은 무엇입니까? – sharataka

답변

2

당신은 운이있어 전혀 다른 선택 API. 브라우저 간 호환성을 위해 Rangy (참고 : 라이브러리 사용 경험이 없습니다.)을 참조하십시오.

편집 2 : 일부 jQuery 플러그인의 경우 this answer을 참조하십시오.

+0

감사! jQuery 라이브러리에 여러 가지 브라우저에서 사용할 수있는 무언가가 있을까요? – sharataka

+0

다른 답변에 대한 링크는 내 편집을 참조하십시오. –

관련 문제