Ik wil in een html-document client-side tekst vet maken. Alleen ik ben nog al wat aan het kloten met DOM-functies. Het probleem is dat de nieuwe nodes niet op de juiste plek worden ingevoegd.
Even mijn code:
Even mijn code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| /*
De functie "breekt" een textNode in drieen. De middelste node
(de gevonden tekst) wordt nog extra gecontained in een <CITE> tag.
[het werken via de class-attribuut werkt niet in combinatie met IE5]
Retouneert het aantal toevoegde sibblings (childs of parent)
Voorbeeld, bij zoeken op tekst "ga" (strTekst="ga"):
Pre:
|oParent|-->|oTextNode.nodeValue="ik ga zoeken"|
Post (indien gevonden):
|oParent|---->|oTextNode.nodeValue="ik "|
|
+--->|oHTMLElement:cite|---->|oTextNode:"ga"|
|
+--->|oTextNode.nodeValue=" zoeken"|
Post (indien gevonden: zoektekst "ga zoeken"):
|oParent|---->|oTextNode.nodeValue="ik "|
|
+--->|oHTMLElement:cite|---->|oTextNode:"ga zoeken"|
*/
function hiLiteText(strTekst,oTextNode)
{
var oNewNode,i,oSplitNode,oAfterText,oParent=oTextNode.parentNode;
//--| Lookup position of text (indexOf is case-insensitive)
i=oTextNode.nodeValue.search(new RegExp(strTekst,'i'));
if(i==-1)
{
return 0; //not found, 0 childs toegevoegd
}
//--| Create found-text container
oNewNode=document.createElement('cite');
oParent.appendChild(oNewNode);
oSplitNode = oTextNode.splitText(i);
oNewNode.appendChild(oSplitNode);
if(oSplitNode.nodeValue.length<=strTekst.length)
{
//--| Geen tekst achter de gevonden zoektekst
return 1; //1 child toegevoegd
}
oAfterText=oSplitNode.splitText(strTekst.length);
oTextNode.parentNode.appendChild(oAfterText);
return 2; //2 childs toegevoegd
}
function zoek(strTekst,oTree)
{
for(var i=0; i<oTree.childNodes.length; i++)
{
if(oTree.childNodes.item(i).nodeType==1) //element node
{
zoek(strTekst,oTree.childNodes.item(i));
}
else if(oTree.childNodes.item(i).nodeType==3) //text node
{
i+=hiLiteText(strTekst,oTree.childNodes.item(i));
}
}
} |