Vandaag is voor mij weer zo'n dag dat je je de haren uit je kop trekt vanwege alle afwijkende 'javascript'-implementaties in de verschillende browsers.
Ik ben bezig met een WYSIWYG-editor m.b.v. een IFrame met designMode='on'.
Daarin wil ik van de huidige selectie in de editor controleren of deze zich in een link bevindt en zo ja, de href- en target-attributen uitlezen en kunnen beïnvloeden:
Dit werkt precies zoals het moet in Internet Explorer. In Firefox werkt dit echter niet.
Na wat zoekwerk stuitte ik hierop:
Er is nu alleen een probleem:
De anchorNode-property doet niet wat ik verwacht, maar dat ligt ongetwijfeld aan mij
.
Hoe kan ik dit oplossen?
En ja, ik ken FCKEditor, TinyMCE, maar ik ben eigenwijs en wil graag het wiel opnieuw uitvinden.
Laten we het er maar even op houden dat ik daar een goede reden voor heb.

Daarin wil ik van de huidige selectie in de editor controleren of deze zich in een link bevindt en zo ja, de href- en target-attributen uitlezen en kunnen beïnvloeden:
JavaScript:
1
2
3
4
5
6
| sText = document.getElementById(activeEditor).contentWindow.document.selection.createRange(); if (sText.parentElement().tagName == "A") { // Is een link, nu kan ik met sText.parentElement().href en sText.parentElement().target aan de haal. } else { // Is geen link. } |
Dit werkt precies zoals het moet in Internet Explorer. In Firefox werkt dit echter niet.
Na wat zoekwerk stuitte ik hierop:
- https://developer.mozilla.org/en/DOM/Selection
- https://developer.mozilla.org/en/DOM/Selection/anchorNode
- https://developer.mozilla.org/en/DOM/element.nodeName
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| if (document.selection) { // IE. sText = document.getElementById(activeEditor).contentWindow.document.selection.createRange(); if (sText.parentElement().tagName == "A") { // Is een link, nu kan ik met sText.parentElement().href en sText.parentElement().target aan de haal. } else { // Is geen link. } } else { // Geen IE, bijv. Firefox. sText = document.getElementById(activeEditor).contentWindow.getSelection(); if (sText.anchorNode.nodeName == "A") { // Is een link, nu kan ik met sText.anchorNode.href en sText.anchorNode.target aan de haal? } else { // Is geen link. } } |
Er is nu alleen een probleem:
De anchorNode-property doet niet wat ik verwacht, maar dat ligt ongetwijfeld aan mij
Als ik nu van een selectie binnen <a>...</a> vraag wat .anchorNode.nodeName is, laat Firefox mij weten dat het een Text Node betreft, en dus geen Element is (zie spec. van nodeName), terwijl ik dus een A-element zou verwachten.anchorNode
Returns the node in which the selection begins.
Mozilla Developer Center
Hoe kan ik dit oplossen?
En ja, ik ken FCKEditor, TinyMCE, maar ik ben eigenwijs en wil graag het wiel opnieuw uitvinden.
Laten we het er maar even op houden dat ik daar een goede reden voor heb.