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 Chriss Miller 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-dokuments (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>
 
Ideally you would use some kind of server-side language for this (PHP, ASP, etc.) as Javascript cannot easily access the text of a page.

--Chessbot

"In that blessed region of Four Dimensions, shall we linger on the threshold of the Fifth, and not enter therein? Ah, no! [...] Then, yielding to our intellectual onset, the gates of the Sixth Dimension shall fly open; after that a Seventh, and then an Eighth -- --" Flatland, A. Square (E. A. Abbott)
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top