Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations TouchToneTommy on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

searching for text in html-documents (Please HELP!!! :) )

Status
Not open for further replies.

150872

Technical User
Jan 16, 2005
3
NO
I need a script that can:
1. Search for text in the body of html-documents in a given folder(and subfolders). The searchform is located in the left frame of my website (not on a webserver).
2. Open the first page it finds in the right frame with the text just searched for, highlighted.

Please excuse my poor English and my even poorer skills with Javascript.

I have found a script that highlights the text in a given document. It looks like this (Embedded in the menu that will be located i the left frame of my site):



<html>
<head>
<meta name="Author" content="">
<title>Dagens meny</title>
<script LANGUAGE="JavaScript">

/*
* 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:blue; background-color:yellow;'>";
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;
}


/*
* 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 highlightSearchTerms(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, for some reason the text of this page is unavailable. Searching will not work.");
}
return false;
}

var bodyText = document.body.innerHTML;
for (var i = 0; i < searchArray.length; i++) {
bodyText = doHighlight(bodyText, searchArray, highlightStartTag, highlightEndTag);
}

document.body.innerHTML = bodyText;
return true;
}


/*
* This displays a dialog box that allows a user to enter their own
* search terms to highlight on the page, and then passes the search
* text or phrase to the highlightSearchTerms function. All parameters
* are optional.
*/
function searchPrompt(defaultText, treatAsPhrase, textColor, bgColor)
{
// This function prompts the user for any words that should
// be highlighted on this web page
if (!defaultText) {
defaultText = "";
}

// we can optionally use our own highlight tag values
if ((!textColor) || (!bgColor)) {
highlightStartTag = "";
highlightEndTag = "";
} else {
highlightStartTag = "<font style='color:" + textColor + "; background-color:" + bgColor + ";'>";
highlightEndTag = "</font>";
}

if (treatAsPhrase) {
promptText = "Please enter the phrase you'd like to search for:";
} else {
promptText = "Please enter the words you'd like to search for, separated by spaces:";
}

searchText = prompt(promptText, defaultText);

if (!searchText) {
alert("No search terms were entered. Exiting function.");
return false;
}

return highlightSearchTerms(searchText, treatAsPhrase, true, highlightStartTag, highlightEndTag);
}


</script>

<base target="hoved">

</head>
<body onload="highlightSearchTerms('search');">
<table width="150" height="100%" border="0" align="left">
<!-- MSTableType="nolayout" -->
<tr>
<td width="156" height="2" align="center">

</td>
</tr>
<tr>
<td width="156" height="52" valign="top" align="center"><b><font face="Verdana" size="3" color="#786D62">&nbsp;</font><font face="Verdana" color="#786D62" size="4">Dagens
Meny</font></b>
</td>
</tr>
<tr>
<td width="156" height="83%" valign="top" align="center"><b>
<font face="Verdana Ref">test<br>
ett<br>
Script</font></b></td>
</tr>
<tr>
<td width="156" height="100%" align="center">
<form name="form1" Onsubmit="highlightSearchTerms(document.form1.searchtext.value);">
<input type="text" value="" size="15" name="searchtext">
</form>
</td>
</tr>
</table>

<P><B><FONT size=1>
<BR>
</FONT></B></P>
<p>&nbsp;</p>
</body>
</html>
 
Client-side Javascript can't do what you want, unless you are trying to search for something on the computer where the web page is displayed, like your own computer with your own browser displaying the web page.

Lee
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top