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. Поиск: вы понимаете, что не сможете искать слова, охватывающие множество элементов 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().