2015-07-19 4 views
0

Можно ли выбрать конкретный текст внутри div с помощью кода. У меня есть div текста, и мне нужно перебирать каждое слово, выбрав его индивидуально, а затем отбирать и на следующее слово.Выбор частей текста div с помощью кода

Я не говорю о симуляции выбора, меняя фон css слов, требующих выделения, но на самом деле выбираю его так, чтобы результат был таким же, как если бы пользователь использовал мышь, чтобы выбрать его.

Я знаю, что это возможно внутри ввода текстовой области, но возможно ли это на Div?

------------------------ ОБНОВЛЕНИЕ ---------------------- ---------------------

Хорошо, вот где я нахожусь с ним, посмотрев на него сегодня. Я могу выбрать весь текст в промежутке, но не конкретно диапазон слов в пределах этого диапазона. Самый близкий я пришел (код, показанный ниже ...) выбирает диапазон вручную, затем удаляет выделение, а затем повторно применяет его.

<div contentEditable = 'true' id="theDiv"> 
A selection of words but only from here to here to be selected 
</div> 
<script type="text/javascript"> 
setInterval(function() { 
    var currSelection = window.getSelection(); 
    var storedSelections = []; 

    if (currSelection) { 
     for (var i = 0; i < currSelection.rangeCount; i++) { 
      storedSelections.push (currSelection.getRangeAt (i)); 
     } 
     currSelection.removeAllRanges(); 
    } 

    if (storedSelections.length != 0) { 
     currSelection.addRange(storedSelections[0]) 
    } 
}, 1000); 
</script> 

Сохраненный объект диапазона выбора имеет свойство startOffset и endOffset. Мой вопрос заключается в том, как установить это наряду с первоначальным выбором через код (а не с помощью мыши)?

+0

Что вы пытаетесь сделать? Предоставьте немного больше информации о том, что вы хотите, чтобы результат был. –

+0

Это определенно возможно, потому что HTML-редакторы нас DIVs в сочетании с «contenteditable» для достижения вещей, которые относятся к тому, что вы пытаетесь сделать (предположение здесь). – bart

+0

Какие браузеры вам интересны? API-интерфейс Selections позволяет это, но он не поддерживается IE (Edge будет иметь его) – dman2306

ответ

0

Пожалуйста, прочитайте эту статью, это трудно обобщить, так что лучше читать:

http://www.quirksmode.org/dom/range_intro.html

Этот ответ здесь может быть полезно также:

Can you set and/or change the user’s text selection in JavaScript?

+0

Насколько мне нравится PPK, эта статья Quirksmode выглядит очень старой; Я не уверен, насколько он используется до сих пор. – m69

+0

Ну, я думаю, что, по крайней мере, у него появятся некоторые идеи о том, как это работает и что он должен смотреть дальше. – lockedz

+0

К сожалению, quirksmode не дал ответа. Метод, который он предложил установить диапазон текста, не работал. – Michael

0

Оказывается, это довольно просто ...

<div id = "theDiv">adsf asdf asdf asdf</div> 

<script type="text/javascript"> 
    var theDiv = document.getElementById('theDiv') 
    theDivFirstChild = theDiv.firstChild; 
    var range = document.createRange(); 
    range.setStart(theDivFirstChild, 2); 
    range.setEnd(theDivFirstChild, 8); 
    window.getSelection().addRange(range); 
</script>