2014-09-26 8 views
10

Ich entwickle eine kleine Anwendung mit SWT Browser Widget. Ich markiere ein Suchtextwort mitSWT Browser Fokus auf nächsten und vorherigen Highlight Text

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

in einem HTML-Dokument. und ersetzen Sie alle Suchbegriffe in HTML-Text auf diese Weise, damit wir alle Suchbegriffe hervorgehoben bekommen.

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

Ich möchte Funktionalität implementieren, wenn ich auf der nächsten Schaltfläche klicken, wird hervorgehoben nächste Wort sollte Fokus erhalten und, wenn ich auf der vorherigen Schaltfläche hervorgehoben vorherigen klicken Text sollte Fokus erhalten. Wie kann ich den nächsten und vorherigen Treffer mit Javascript in der Eclipse RCP-Anwendung erreichen?

+0

Sie könnten mit der Eingabe des Codes beginnen, den Sie verwenden, um das Suchergebnis zu markieren. – Baz

+0

Ok, aber wie fügst du die 'mark' Tags zu deinem HTML hinzu? – Baz

Antwort

1

Dies wird am besten durch die Kombination von JavaScript mit Java-Code gelöst. Es hängt davon ab, welche Art von HTML-Inhalt Sie behandeln werden, wenn es statusbehaftet ist (z. B. kann nicht neu geladen werden), dynamisch mit viel JS-Code oder einfach statisch. In den meisten Fällen würde die beste Lösung darin bestehen, den Großteil der Logik in JS zu schreiben und nur minimalen Code in Java, um JS-Aktionen an die SWT-GUI zu binden.

ist Es gibt mehrere Dinge, die Sie implementieren müssen:

  1. Stichwort Suche
  2. Makeln Hervorhebung
  3. Highlight von einem Wort zum anderen

1. Suchen Makeln: Sie erkennen, dass Sie werden nicht in der Lage sein, nach Wörtern zu suchen, die sich durch viele HTML-Elemente wie W<span>o</span>rd erstrecken? Wenn das in Ordnung ist, können Sie einfach wie in Java suchen und ersetzen. Ich würde dafür sorgen, jedes Wort mit ID: <span id="match1"> einzeln zu taggen und daran zu erinnern, wie viele Übereinstimmungen insgesamt gefunden wurden.

Sie könnten diese Suche auch auf der JS-Seite durchführen, indem Sie eine Funktion hinzufügen, die durch DOM iteriert und nach einem bestimmten Text sucht und ihn mit einem anderen DOM-Objekt umschließt.

2. Toggling Hervorhebung: Es ist am besten in JavaScript getan. Fügen Sie Ihrem HTML ein JS-Codefragment hinzu, das den DOM-Elementstil umschaltet. Etwas wie: `

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

können Sie dies von SWT JS anrufen unter Berufung auf swtBrowser.execute("highlight('match1')") Weitere sollten Sie Funktion implementieren, die Hervorhebung auszieht.

3. Hervorhebung zwischen Elementen umschalten: Dies kann sowohl auf der Java-Seite als auch auf der JS-Seite erfolgen. Ich würde wahrscheinlich mit JS gehen und zwei weitere Funktionen hinzufügen: highlightNext() und highlightPrev(), die nur highlight() Funktion mit richtigen IDs aufrufen würde. Dann könnten Sie in Java SWT-Schaltflächen erstellen, die JS-Funktionen über SWTBrowser.execute() aufrufen.