Suche nach als

Suche markiere String

Auf dieser Seite:

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.

Suche nach als

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>

 


Valid XHTML 1.0 Check den Code.

Zeichenzähler >> << Menu Sprungziel
Ich bin hier: > JavaScript Lehrling >>> Suche markiere String
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 29.01.2010