SWT Browser фокусируется на следующем и предыдущем выделенном тексте

Я занимаюсь разработкой небольшого приложения с виджетом SWT Browser. Я выделяю слово для поиска с помощью

<a id="xyz" href=''><mark>test</mark></a>

в документе HTML. и таким образом замените все поисковые слова в HTML-тексте, чтобы мы выделили все искомые слова.

    htmltext.replaceAll("(?i)"+Pattern.quote(searchword), "\\<a id='xyz' href=''> <mark>$0\\</mark></a>

Я хочу реализовать функциональность, которая заключается в том, что если я нажимаю на следующую кнопку, следующее выделенное слово должно получить фокус, а если я нажму на предыдущую кнопку, предыдущий выделенный текст должен получить фокус. Как я могу выполнить следующий и предыдущий удар, используя Javascript в приложении Eclipse RCP.

1 ответ

Это лучше всего решить путем объединения JavaScript с кодом Java. Это зависит от того, какой тип HTML-контента вы собираетесь обрабатывать, является ли он состоящим из состояния (например, не может перезагружаться), динамическим с большим количеством кода JS или простой статической. В большинстве случаев лучшее решение будет включать большую часть логики, которая будет написана на JS, и просто минимальный код на Java, чтобы связать действия JS с SWT GUI.

Есть несколько вещей, которые нужно реализовать:

  1. поиск по ключевым словам
  2. переключение подсветки
  3. переключение выделения с одного слова на другое

1. Поиск: вы понимаете, что не сможете искать слова, охватывающие множество элементов HTML, например W<span>o</span>rd? Если это нормально, тогда вы можете просто искать и заменять из Java, как сейчас. Я бы пошёл для того, чтобы индивидуально пометить каждое совпадение слов с помощью id <span id="match1"> и вспоминая, сколько совпадений было найдено.

Скорее всего, вы могли бы также выполнить такой поиск на стороне JS, добавив функцию, которая выполняет итерацию по DOM, ищет конкретный текст и оборачивает его другим объектом DOM.

2. Переключение подсветки: лучше всего делать в JavaScript. Добавьте к вашему HTML фрагмент кода JS, который переключает стиль элемента DOM. Что-то вроде: `

function highlight(id) {
  document.getElementById(id).className = 'highlighted'
}

Вы сможете вызвать этот JS из SWT, вызвав swtBrowser.execute("highlight('match1')")Далее вам следует реализовать функцию, которая снимает подсветку.

3. Переключение подсветки между элементами: это можно сделать как на стороне Java, так и на стороне JS. Я, вероятно, хотел бы пойти с JS и добавить еще две функции: highlightNext() а также highlightPrev() это было бы просто позвонить highlight() функционировать с правильными идентификаторами. Тогда в Java вы могли бы создавать кнопки SWT, которые вызывают функции JS через SWTBrowser.execute().

Другие вопросы по тегам