You are here: irt.org | FAQ | JavaScript | Text | Q171 [ previous next ]
It can be done in Netscape Navigator 4 and Microsoft Internet Explorer 4+:
<script language="JavaScript"><!--
var pos = 0;
function findit() {
if (document.myform.mytext.value == '') {
alert('Nothing to search for');
return;
}
if (document.all) {
var found = false;
var text = document.body.createTextRange();
for (var i=0; i<=pos && (found=text.findText(document.myform.mytext.value)) != false; i++) {
text.moveStart("character", 1);
text.moveEnd("textedit");
}
if (found) {
text.moveStart("character", -1);
text.findText(document.myform.mytext.value);
text.select();
text.scrollIntoView();
pos++;
}
else {
if (pos == '0')
alert('"' + document.myform.mytext.value +'" was not found on this page.');
else
alert('No further occurences of "' + document.myform.mytext.value +'" were found.');
pos=0;
}
}
else if (document.layers) {
find(document.myform.mytext.value,false);
}
}
if (document.layers || document.all) {
document.write('<form name="myform">');
document.write('<input type="text" name="mytext">');
document.write('<input type="button" value="Find" onClick="findit()">');
document.write('<\/form>');
}
//--></script>If you want to search from a popup window, then the above code needs to be amended slightly:
<form name="myform">
<input type="text" name="mytext">
<input type="button" value="Find" onClick="findit()">
</form>
<script language="JavaScript"><!--
var pos = 0;
function findit() {
if (document.myform.mytext.value == '') {
alert('Nothing to search for');
return;
}
if (document.all) {
var found = false;
var text = opener.document.body.createTextRange();
for (var i=0; i<=pos && (found=text.findText(document.myform.mytext.value)) != false; i++) {
text.moveStart("character", 1);
text.moveEnd("textedit");
}
if (found) {
text.moveStart("character", -1);
text.findText(document.myform.mytext.value);
text.select();
text.scrollIntoView();
pos++;
}
else {
if (pos == '0')
alert('"' + document.myform.mytext.value +'" was not found on this page.');
else
alert('No further occurences of "' + document.myform.mytext.value +'" were found.');
pos=0;
}
}
else if (document.layers) {
opener.find(document.myform.mytext.value,false);
}
}
//--></script>And then in the main window:
<script language="JavaScript"><!--
if (document.all || document.layers) {
popup = window.open('search.htm');
if (!popup.opener) popup.opener = self;
}
//--></script>Thanks to Eric for suggesting changes when a match isn't found.
Tracy Blevins writes:
I did find one minor bug that is fixed by setting pos=1 instead of pos=0 in the else condition of if(found). Without this change the first instance of the text to find is found twice after going through the entire document once.