Ik ben bezig met een hobbyprojectje waarbij ik een originele tekst, een vertaling en de bijbehorende annotaties (aantekeningen) op een hippe manier wil samenbrengen. Dat lukt me wel aardig: het achterliggende programma werkt redelijk en de website die dat programma moet uitspugen begint ook al vorm te krijgen.
Sterker nog, in Firefox werkt dit voorbeeld al precies zoals ik wil (alleen rood onderstippelde woordgroepen hebben annotaties). Internet Explorer ligt echter weer dwars op het gebied van Javascript: de annotaties, die als een hoger liggend vlak op de pagina tevoorschijn moeten komen als men over een geannoteerd woord gaat, komen niet te voorschijn. Ook het markeren van gepaarde woordgroepen komt niet uit de verf.
Probleem is dat ik niet echt weet wat het probleem is
. Dit is de eerste keer dat ik zelf echt iets maak met Javascript en het onderstaande is met vallen en opstaan werkend gekregen in Fx (waar het nu zonder waarschuwingen in werkt). De fout zou volgens IE zitten in regel 24, teken 5: "Deze eigenschap of methode wordt niet ondersteund door dit object.").
Ik denk dat de fout ontstaat doordat annotation geen gestandaardiseerd attribuut van een anchor-tag is. Volgens mij had ik ergens gelezen dat het zo wel mag en Fx valt er ook niet over. Dus: ligt het hieraan en zo ja, wat is een betere oplossing? Zo nee, waar ligt de fout dan?
Zoeken op Google en hier levert zo snel weinig concreets op. setAttribute en style of className gaan vaak fout doordat IE daar raar mee omgaat, maar over setAttribute en zelfbedachte attributen is weinig te vinden...
Alle bestanden nog een keer:
Sterker nog, in Firefox werkt dit voorbeeld al precies zoals ik wil (alleen rood onderstippelde woordgroepen hebben annotaties). Internet Explorer ligt echter weer dwars op het gebied van Javascript: de annotaties, die als een hoger liggend vlak op de pagina tevoorschijn moeten komen als men over een geannoteerd woord gaat, komen niet te voorschijn. Ook het markeren van gepaarde woordgroepen komt niet uit de verf.
Probleem is dat ik niet echt weet wat het probleem is
Ik denk dat de fout ontstaat doordat annotation geen gestandaardiseerd attribuut van een anchor-tag is. Volgens mij had ik ergens gelezen dat het zo wel mag en Fx valt er ook niet over. Dus: ligt het hieraan en zo ja, wat is een betere oplossing? Zo nee, waar ligt de fout dan?
Zoeken op Google en hier levert zo snel weinig concreets op. setAttribute en style of className gaan vaak fout doordat IE daar raar mee omgaat, maar over setAttribute en zelfbedachte attributen is weinig te vinden...
JavaScript:
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
| /* * Gives the paired word groups and the * translation hide checkbox interactivity */ window.onload = function() { // Translation hiding document.getElementById('medela_hideTr').onclick = function() { var translation = document.getElementById('medela_trText'); if (this.checked) { translation.className = 'medela_hidden ' + translation.className; } else { translation.className = translation.className.replace('medela_hidden',''); } } //Translation anchors var tra = document.getElementById('medela_trText').getElementsByTagName('a'); for (var i=0; i<tra.length; i++) { // Original counterpart of this anchor var ora = document.getElementById(tra[i].getAttribute('href', 2).replace('#','')); // Annotation preserving if (ora.hasAttribute('title') && ora.getAttribute('title') != '') { ora.setAttribute('annotation', ora.getAttribute('title')); ora.removeAttribute('title', ''); ora.className = 'medela_hasAnnotation ' + ora.className; tra[i].className = 'medela_hasAnnotation ' + tra[i].className; } else { ora.setAttribute('annotation', ''); } // Mouse event handling tra[i].onmouseover = function() { var counter = this.getAttribute('href', 2).replace('#',''); highlight(counter); setAnnotation(document.getElementById(counter).getAttribute('annotation')); } ora.onmouseover = function() { highlight(this.id.replace('medela_or', 'medela_tr')); setAnnotation(this.getAttribute('annotation')); } tra[i].onmouseout = function() { dehighlight(this.getAttribute('href', 2).replace('#','')); hideAnnotation(); } ora.onmouseout = function() { dehighlight(this.id.replace('medela_or', 'medela_tr')); hideAnnotation(); } } } /* * Highlights specified word group (adds class name) */ function highlight(wordGroupId) { var wordgroup = document.getElementById(wordGroupId); wordgroup.className = 'medela_match ' + wordgroup.className; } /* * Dehighlights specified word group (removes class name) */ function dehighlight(wordGroupId) { var wordgroup = document.getElementById(wordGroupId); wordgroup.className = wordgroup.className.replace('medela_match', ''); } /* * Sets a new annotation and shows it */ function setAnnotation(annotation) { if (annotation != "") { document.getElementById('medela_anText').getElementsByTagName('p')[0].firstChild.nodeValue = annotation; document.getElementById('medela_anText').style.display = 'block'; } else { // Fail-safe for some browsers hideAnnotation(); } } /* * Hides the annotation block (does not reset the text) */ function hideAnnotation() { document.getElementById('medela_anText').style.display = 'none'; } |
Alle bestanden nog een keer: