|
Posted by shimmyshack on 11/28/07 15:50
On Nov 27, 1:25 am, John <John_nos...@nnnnnnnnn.nowhere> wrote:
> Thanks for the information.
>
> I just have one more question. If I keep it a PHP script, how can I
> add another php script like a yellow search highlighter? I have the
> yellow php highlighter script, but do not know how to include it?
well ok, this is a funny thing to do unless its a spellchecker.
you would have to send the complete text to be searched via ajax, and
return the same (but with some wrapped in tags which will of course be
the yellow parts) and replace the original text.
If you do it this way you may as well just use javascript:
function highlightWord(node,word)
{
// Iterate into this nodes childNodes
if (node.hasChildNodes)
{
var hi_cn;
for (hi_cn=0;hi_cn<node.childNodes.length;hi_cn++)
{
highlightWord(node.childNodes[hi_cn],word);
}
}
// And do this node itself
if (node.nodeType == 3)
{ // text node
tempNodeVal = node.nodeValue.toLowerCase();
tempWordVal = word.toLowerCase();
if (tempNodeVal.indexOf(tempWordVal) != -1)
{
pn = node.parentNode;
if (pn.className != "highlight")
{
// word has not already been highlighted!
nv = node.nodeValue;
ni = tempNodeVal.indexOf(tempWordVal);
// Create a load of replacement nodes
before = document.createTextNode(nv.substr(0,ni));
docWordVal = nv.substr(ni,word.length);
after = document.createTextNode(nv.substr(ni+word.length));
hiwordtext = document.createTextNode(docWordVal);
hiword = document.createElement("span");
hiword.className = "highlight";
hiword.appendChild(hiwordtext);
pn.insertBefore(before,node);
pn.insertBefore(hiword,node);
pn.insertBefore(after,node);
pn.removeChild(node);
}
}
}
}
function googleSearchHighlight()
{
if (!document.createElement) return;
ref = document.referrer;
ref = (ref) ? ref : location.search;
if (ref.indexOf('?') == -1) return;
qs = ref.substr(ref.indexOf('?')+1);
qsa = qs.split('&');
for (i=0;i<qsa.length;i++)
{
qsip = qsa[i].split('=');
if (qsip.length == 1) continue;
if (qsip[0] == 'q' || qsip[0] == 'p')
{ // q= for Google, p= for Yahoo
words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
for (w=0;w<words.length;w++)
{
highlightWord(document.getElementsByTagName("body")[0],words[w]);
}
}
}
}
i think thats all you need for
http://www.example.org/letter.htm?q=hello
which will highlight the word hello
with the rules set by
..highlight
{
color : #000;
background-color : yellow;
}
if i'm wrong i'm wrong, but i think that will work, credit goes to
others for the bulk of that highligting code.
[Back to original message]
|