Suche markiere String
Aktuelle Seite durchsuchen und markieren
Dieses Script wird auf der ganzen lehrlings-Site verwendet (im oberen Balken). Es findet und markiert einen String, wahlweise zusammenhängend oder als einzelne Worte. Die Markierungen bleiben auch nach erneuter Suche erhalten, es sei denn, die Seite wird neu geladen.
Ich habe ein weiteres Script in Arbeit, es ist etwas einfacher und es funktioniert schon beinahe: >> Form Suche 2
Das Suchformular
<script type="text/javascript">
<form id="searchform" action="#">
<span title="no Keyboard shortcut">
<span class="shortkey"></span>Suche nach
</span>>
<input type="text" name="SuchText" value="" size="30" />
<span>als</span>
<select name="SuchOption">
<option value="true" selected="selected">Satzteil</option>
<option value="">einzelne Worte</option>
</select>
<input type="image" src="images/bikinigirl.gif" class="submit" alt="suche-starten" title="suche jetzt!"
onclick="SuchProzessor(this.form.SuchText.value, this.form.SuchOption.value)" />
</form>
</script>
document.body.innerHTML
Das Script
<script type="text/javascript">
// Achtung: aus unbekannten Gründen muss oberhalb eine Zeile leer sein!
// This is from nsftools.com website.
// This is the function that actually highlights a text string by
// adding HTML tags before and after all occurrences of the search term.
// You can pass your own tags if you'd like, or if the
// highlightStartTag or highlightEndTag parameters are omitted or
// are empty strings then the default font tags will be used.
function doHighlight(bodyText, searchTerm, highlightStartTag, highlightEndTag)
{
// the highlightStartTag and highlightEndTag parameters are optional
if ((!highlightStartTag) || (!highlightEndTag)) {
highlightStartTag = "<font style='color:Black; background-color:Gold;'> ";
highlightEndTag = " </font>";
}
// find all occurences of the search term in the given text,
// and add some "highlight" tags to them (we're not using a
// regular expression search, because we want to filter out
// matches that occur within HTML tags and script blocks, so
// we have to do a little extra validation)
var newText = "";
var i = -1;
var lcSearchTerm = searchTerm.toLowerCase();
var lcBodyText = bodyText.toLowerCase();
while (bodyText.length > 0) {
i = lcBodyText.indexOf(lcSearchTerm, i+1);
if (i < 0) {
newText += bodyText;
bodyText = "";
} else {
// skip anything inside an HTML tag
if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i)) {
// skip anything inside a <script> block
if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i)) {
newText += bodyText.substring(0, i) + highlightStartTag +
bodyText.substr(i, searchTerm.length) + highlightEndTag;
bodyText = bodyText.substr(i + searchTerm.length);
lcBodyText = bodyText.toLowerCase();
i = -1;
}
}
}
}
return newText;
}
/*
* MEIN FORMULAR RUFT DIESES SCRIPT, dieses ruft obiges Script!
* This is sort of a wrapper function to the doHighlight function.
* It takes the searchText that you pass, optionally splits it into
* separate words, and transforms the text on the current web page.
* Only the "searchText" parameter is required; all other parameters
* are optional and can be omitted.
*/
function SuchProzessor(searchText, treatAsPhrase, warnOnFailure, highlightStartTag, highlightEndTag)
{
// if the treatAsPhrase parameter is true, then we should search for
// the entire phrase that was entered; otherwise, we will split the
// search string so that each word is searched for and highlighted
// individually
if (treatAsPhrase) {
searchArray = [searchText];
} else {
searchArray = searchText.split(" ");
}
if (!document.body || typeof(document.body.innerHTML) == "undefined") {
if (warnOnFailure) {
alert("Sorry, the text of this page is unavailable, search is not working.");
}
return false;
}
var bodyText = document.body.innerHTML;
for (var i = 0; i < searchArray.length; i++) {
bodyText = doHighlight(bodyText, searchArray[i], highlightStartTag, highlightEndTag);
}
// Der veränderte Text wird zum Seitentext
document.body.innerHTML = bodyText;
return true;
}
</script>