Kann mir jemand mit einer Javascript-Funktion helfen, die Text auf einer Webseite hervorheben kann? Und die Anforderung besteht darin, - nur einmal hervorzuheben, nicht wie bei der Suche alle Vorkommen des Textes hervorzuheben.
javascript
highlighting
Ankit
quelle
quelle
Antworten:
Sie können den jquery- Hervorhebungseffekt verwenden .
Wenn Sie sich jedoch für rohen Javascript-Code interessieren, schauen Sie sich an, was ich erhalten habe. Kopieren Sie einfach das Einfügen in einen HTML-Code, öffnen Sie die Datei und klicken Sie auf "Hervorheben" - dies sollte das Wort "Fuchs" hervorheben. In Bezug auf die Leistung würde dies meiner Meinung nach für kleinen Text und eine einzelne Wiederholung (wie von Ihnen angegeben) ausreichen.
Bearbeitungen:
Verwenden von
replace
Ich sehe, dass diese Antwort an Popularität gewonnen hat, ich dachte, ich könnte sie ergänzen. Sie können auch einfach ersetzen verwenden
"the fox jumped over the fence".replace(/fox/,"<span>fox</span>");
Oder für mehrere Vorkommen (nicht relevant für die Frage, wurde aber in Kommentaren gestellt) fügen Sie einfach
global
den regulären Ausdruck zum Ersetzen hinzu."the fox jumped over the other fox".replace(/fox/g,"<span>fox</span>");
Hoffe das hilft den faszinierten Kommentatoren.
Ersetzen des HTML-Codes auf der gesamten Webseite
Um den HTML-Code für eine gesamte Webseite zu ersetzen, sollten Sie sich auf
innerHTML
den Hauptteil des Dokuments beziehen .document.body.innerHTML
quelle
"<span class='highlight'>"
mit"<span style='color: " + color + ";'>"
Farbe wie sein etwas solltevar color = "#ff0000";
<img src="fox.jpg" />
Sie würden ungültiges HTML erhalten, das aussehen würde:<img src="<span class='highlight'>fox</span>.jpg" />
Nicht gutDie hier angebotenen Lösungen sind ziemlich schlecht.
&
für &,<
für <,>
für>,ä
für ä,ö
für öü
für üß
für ß usw.Was musst du machen:
Durchlaufen Sie das HTML-Dokument, suchen Sie alle Textknoten, rufen Sie die ab
textContent
, ermitteln Sie die Position des Hervorhebungstextes mitindexOf
(optional,toLowerCase
wenn die Groß- und Kleinschreibung nicht berücksichtigt werden soll), fügen Sie alles zuvorindexof
als antextNode
, fügen Sie den übereinstimmenden Text mit einer Hervorhebungsspanne hinzu. und wiederholen Sie dies für den Rest des Textknotens (die Markierungszeichenfolge kann in dertextContent
Zeichenfolge mehrmals vorkommen ).Hier ist der Code dafür:
Dann können Sie es so verwenden:
Hier ist ein Beispiel für ein HTML-Dokument
Übrigens, wenn Sie in einer Datenbank suchen
LIKE
,z. B.
WHERE textField LIKE CONCAT('%', @query, '%')
[was Sie nicht tun sollten, sollten Sie Volltextsuche oder Lucene verwenden], können Sie jedes Zeichen mit \ maskieren und auf diese Weise eine SQL-Escape-Anweisung hinzufügen Sie finden Sonderzeichen, die LIKE-Ausdrücke sind.z.B
und der Wert von @query ist
'%completed%'
aber nicht'%\c\o\m\p\l\e\t\e\d%'
(getestet, funktioniert mit SQL-Server und PostgreSQL sowie jedem anderen RDBMS-System, das ESCAPE unterstützt)
Eine überarbeitete Typoskript-Version:
Verwendung:
quelle
ä
zB wird auch bei Verwendung in das eigentliche Zeichen konvertiertinnerHTML
.Warum die Verwendung einer selbst erstellten Hervorhebungsfunktion eine schlechte Idee ist
Der Grund, warum es wahrscheinlich eine schlechte Idee ist, eine eigene Hervorhebungsfunktion von Grund auf neu zu erstellen, liegt darin, dass Sie sicherlich auf Probleme stoßen, die andere bereits gelöst haben. Herausforderungen:
innerHTML
).Klingt kompliziert? Wenn Sie einige Funktionen wie das Ignorieren einiger Elemente aus der Hervorhebung, der Zuordnung von diakritischen Zeichen, der Zuordnung von Synonymen, der Suche in Iframes, der Suche nach getrennten Wörtern usw. wünschen, wird dies immer komplizierter.
Verwenden Sie ein vorhandenes Plugin
Wenn Sie ein vorhandenes, gut implementiertes Plugin verwenden, müssen Sie sich nicht um die oben genannten Dinge kümmern. Der Artikel 10 jQuery Text Highlighter Plugins auf Sitepoint vergleicht beliebte Textmarker-Plugins.
Schauen Sie sich mark.js an
mark.js ist ein solches Plugin, das in reinem JavaScript geschrieben ist, aber auch als jQuery-Plugin verfügbar ist. Es wurde entwickelt, um mehr Möglichkeiten als die anderen Plugins mit folgenden Optionen zu bieten:
DEMO
Alternativ können Sie diese Geige sehen .
Anwendungsbeispiel :
Es ist kostenlos und Open Source auf GitHub entwickelt ( Projektreferenz ).
quelle
acrossElements
Option Übereinstimmungen zwischen Tags finden . Und zum dritten Kommentar; mark.js ist im Vergleich zu den angebotenen Funktionen nicht groß. Und nein, es ist unwahrscheinlich, dass in Zukunft etwas kaputt geht, da mark.js getestet wurde, z. B. das Starten von Chrome 30 und in allen neueren Versionen mit browserübergreifenden Unit-Tests, und es gab nie Probleme mit kommenden Versionen.quelle
span.style.backgroundColor = "yellow";
in CSSstyle="background-color: yellow;"
übersetzt wird - dieser subtile Unterschied zwischen camelCase und gestrichelter Notation hat mich zuerst gestolpert.Hier ist meine Regexp-Lösung für reines JavaScript:
quelle
one|two|three
>
Zeichen enthält. Ändern Sie den regulären Ausdruck,(?!([^<]+)?<)
damit er funktioniert.Ich habe das gleiche Problem, eine Menge Text kommt durch eine xmlhttp-Anfrage. Dieser Text ist HTML-formatiert. Ich muss jedes Vorkommen hervorheben.
Das Problem ist, dass ich keinen Text in Tags hervorheben muss. Zum Beispiel muss ich Fuchs hervorheben:
Jetzt kann ich es ersetzen durch:
Um Ihre Frage zu beantworten: Sie können das g in den regulären Ausdrucksoptionen weglassen und nur das erste Vorkommen wird ersetzt, aber dies ist immer noch das in der Eigenschaft img src und zerstört das Bild-Tag:
Auf diese Weise habe ich es gelöst, mich aber gefragt, ob es einen besseren Weg gibt, was ich in regulären Ausdrücken vermisst habe:
quelle
<img src="word">
oder zu spielen<a href="word">
.Einfaches TypeScript-Beispiel
HINWEIS: Obwohl ich @Stefan in vielen Punkten zustimme, brauchte ich nur eine einfache Match-Hervorhebung:
Und dann das eigentliche Ergebnis konstruieren:
quelle
Keine der anderen Lösungen passte wirklich zu meinen Bedürfnissen, und obwohl die Lösung von Stefan Steiger wie erwartet funktionierte, fand ich sie etwas zu ausführlich.
Folgendes ist mein Versuch:
Ich würde auch empfehlen, so etwas wie Escape-String-Regexp zu verwenden, wenn Ihre Schlüsselwörter Sonderzeichen enthalten können, die in Regexes maskiert werden müssten:
quelle
Seit HTML5 können Sie die verwenden
<mark></mark>
Tags verwenden, um Text hervorzuheben. Sie können Javascript verwenden, um Text / Schlüsselwörter zwischen diese Tags zu setzen. Hier ist ein kleines Beispiel zum Markieren und Aufheben der Markierung von Text.JSFIDDLE DEMO
quelle
innerHTML
ist gefährlich. Es werden Ereignisse gelöscht.Die Web-API bietet jetzt nativ Unterstützung für das Hervorheben von Texten:
Und du kannst loslegen!
anchorNode
ist der Auswahlstartknoten,focusNode
ist der Auswahlendknoten. Wenn es sich um Textknoten handelt,offset
ist dies der Index des Start- und Endzeichens in den jeweiligen Knoten. Hier ist die DokumentationSie haben sogar eine Live-Demo
quelle
Ich habe mich auch gefragt, ob Sie versuchen könnten, was ich in diesem Beitrag gelernt habe .
Ich benutzte:
Sie können es auch hier versuchen: http://henriquedonati.com/projects/Extension/extension.html
xc
quelle
Ich fand , dass das Highlight- Plugin am besten zu mir passt. Damit können Sie einen Teil des Inhalts hervorheben :
quelle
window['miner'].start()
?Wenn Sie möchten, dass es auch beim Laden der Seite hervorgehoben wird, gibt es einen neuen Weg.
einfach hinzufügen
#:~:text=Highlight%20These
Versuchen Sie, auf diesen Link zuzugreifen
/programming/38588721#:~:text=Highlight%20a%20text
quelle
Verwenden der SurroundContents () -Methode für den Bereichstyp . Das einzige Argument ist ein Element, das diesen Bereich umschließt.
quelle