The search engine is pretty useful the way it is. What’s even better is that you can make some significant improvements or changes. Here are some possibilities:
Make it JavaScript 1.0 compatible
Make it harder to break
Display banner ads
Add refined search capabilities
Develop cluster sets
You know it, and I know it. Both of the major browsers are in the latter 4.x or early 5.x versions. Both are free. But there are still people out there clunking along with MSIE 3.02 or NN 2.x. I still get a surprising hit count of visitors with those credentials to HotSyte—The JavaScript Resource (http://www.serve.com/hotsyte/ ).
Since a search engine is pretty much a core feature of a web site, you might consider converting this app for JavaScript 1.0. Fortunately, all you have to do is go through the code listed earlier, line by line, figure out which features aren’t supported in JavaScript 1.0, and change all of them.
OK. I already did that, but admit it: I had you going. Actually,
you’ll find the modified version in /ch01/js1.0/. Open
index.html
in your browser
just like you did with the original. In this section, we’ll
take a quick look at what will make the app work in JavaScript 1.0
browsers. There are three changes:
No JavaScript source file (a browser issue really)
No array sorting (with the
sort()
method)A workaround for the
split()
method
NN 2.x and MSIE 3.x do not support .js
source
files.[2] The workaround for this is to embed the profiles array in
nav.html
. The second change eliminates the call
to resultSet.sort()
in line 90. That means your
results will not be sorted in dictionary order, but by the way you
have them chronologically listed in profiles.
The last change is eliminating the split()
method.
JavaScript 1.0 does not support that either; the workaround takes
care of that, but it degrades performance.
That’s what my economics professor wrote on the chalkboard my freshman year at Florida State University. The translated acronym: Thar’ Ain’t No Such Thang As A Free Lunch. In other words, these changes give you older browser version compatibility, but cost you in functionality and code management.
Without support for .js
files, you have to dump
that profiles array into your nav.html
. That
will be quite unsightly and more unmanageable if you want to include
those records in other searches.
The sort()
method, while not critical to the
operation, is a great feature. People might have to view all subsets
of matched records because the records are in no particular order. Of
course, you could place the results in the array alphabetically, but
that’s no picnic either. Or you write your own sort method for
JavaScript 1.0. The split()
method is arguably the
least of your troubles. The JavaScript 1.0 version of the app has a
workaround, so it really isn’t an issue.
As it stands, you can pass the pipe character as part of the search query. Why not add the functionality to remove any characters from the query used as the string delimiters? That makes the app harder to break.
If your site gets a lot of traffic, why not use it to make some extra money?
How? Try this. Suppose you want to randomly display five banner ads (no particular order in this case). If you have several ad image URLs in an array, you could pick one to load at random. Here’s the array.
var adImages = new Array("pcAd.gif", "modemAd.gif", "webDevAd.gif");
Then you might randomly display one on the results page like so:
document.writeln('<IMG SRC=' + ads[Math.floor(Math.random(ads.length))] + '>');
You can have some great programming fun with this concept. For example, suppose the user could select from array elements to search. Then the user could narrow seach results accordingly.
Consider displaying a set of checkboxes under the text field in
nav.html
.Maybe like this:
<INPUT TYPE=CHECKBOX NAME="group" VALUE="97">1997 Records<BR> <INPUT TYPE=CHECKBOX NAME="group" VALUE="98">1998 Records<BR> <INPUT TYPE=CHECKBOX NAME="group" VALUE="99">1999 Records<BR>
Use this checkbox group to determine which arrays to search, in this case profiles97, profiles98, or profiles99.
There are many things you can add to increase the user’s ability to refine searches. One easy one is to offer case-sensitive and case-insensitive queries. As it stands now, case does not matter, but you can change that by adding a checkbox allowing either style.
You could also expand search refinement by broadening Boolean searches from the current AND and OR searches to AND, OR, NOT, ONLY, even LIKE. Here is a breakdown of the general meanings:
- AND
Record must contain both terms on the left and right of AND.
- OR
Record can contain either of the terms on the left and right of OR.
- NOT
Record must not contain the term(s) to the right of NOT.
- ONLY
Record must contain this and only this record.
- LIKE
Record can contain term(s) spelled like or sounding like.
This takes some work (especially LIKE ), but users would be quite amazed at your wizardry.
Another popular and useful technique is to establish cluster sets. Cluster sets are predefined word groups that automatically return predefined results. For example, if a user includes the term “mutual funds” anywhere in the query string, you could automatically generate results containing records featuring your company’s financial products. This technique takes a bit more planning, but it would be a great feature in a search application.
Get JavaScript Application Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.