Ga naar inhoud

[js] Zelf een hyperlink mbv een WYSIWYG aanmaken


anoniem

Aanbevolen berichten

Ik ben op zoek naar een stukje js of documentatie waarmee ik de functie execcommand(CreateLink ) kan vervangen door een zelf geschreven progje (dit is nodig om de links eenvoudig beheerbaar te maken door links van het CMS direct op te nemen). Het enigste wat ik kan vinden is: http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/execcommand.asp Dus ik wil op de plek van de cursor een pop-upje hebben waar ik zelf eea in kan zetten, waarna het correct wordt opgenomen, alsware het door bovenstaande functie gedaan. Heeft iemand dit probleem al eens opgelost of heb je een aanwijzing????
Link naar reactie
in grote stappen: geselecteerde tekst uitlezen met js: [code:1:d59554da25] r = document.selection.createRange(); url_text = r.text; [/code:1:d59554da25] vervolgens een modaldialog openen, die gekoppeld is aan de pagina [code:1:d59554da25] var args = {opener: window,str: 'Editor'}; var new_url = window.showModalDialog(url, args); r.pasteHTML(new_url); [/code:1:d59554da25] de url die je opgeeft is een compleet nieuwe html pagina. Van daaruit kun je de opener aanspreken middels het window.external.opener object. Je moet eerst de tekst ophalen en die bijvoorbeeld in een tekstvak zetten, bijvoorbeeld (in de geopende pagina): document.myform.tekstvak.value = window.external.opener.url_text; vervolgens kun je een formulier maken, op de manier zoals jij wilt. Bij het afsluiten van de showModalDialog() wordt er automatisch een waarde geretouneert, maar die waarde moet je wel eerst opgeven; window.external.returnValue. Dus bijvoorbeeld een knop, die deze code aanroept: [code:1:d59554da25] window.external.returnValue = document.myform.url.value; window.close(); [/code:1:d59554da25] het mooie van showModalDialog is dat het net als het huidige url venster is gekoppeld aan je pagina. Het script gaat dus pas verder als je de dialog hebt afgesloten. Ook kan je niet browser afsluiten als de sialog nog zichtbaar is.
Link naar reactie
Dit werkt niet correct, zover was ik zelf ook al gekomen. Hij laat alleen het geselekteerde deel zien. Als je mbv mijn command ergens in een correcte link gaat staan (zonder te markeren) en je ropet de functie aan, dan markeert hij zelf de totale link en opent hij een venster met daarin de url. De link en de url hoeven niet hetzelfde te zijn. Mijn streven is een js te schrijven die op elke wikkekeurige plaats in een textarea is aan te roepen (eventueel naar voren scant op een<A>-tag en naar achteren op een </A> en alle wat hiermee te maken heeft aanbied om te bewerken.
Link naar reactie
dit werkt wel correct het doet alleen niet wat jij wil... jij wil een al bestaande link aanpassen, niet een nieuwe link toevoegen. dat ligt wat lastiger, want bij mij weten is niet mogelijk om te kijken binnen welk element de cursor staat. Wat echter wel mogelijk is, is kijken op welk element er een event is losgelaten. Als je nu tactisch wat eventhandlers plaatst, zoals onclick dan kun je het srcElement uitlezen en ergens als variabele opslaan. Met srcElement.outerHTML krijg je, in het geval van een hyperlink, de hele tag.
Link naar reactie
Ik heb diverse methoden bekeken en ook de doc's doorgenomen. Tot op heden nog geen sluitende oplossing gevonden, dus ik ga het zelf maar proggen. Het volgende probeersel heb ik samengesteld: [code:1:c6ab2a9532]function createLink() { var objF=document.frames[fID]; if(objF) { var oud=document.frames[fID].document.body.innerHTML; var TempTR = objF.document.selection.createRange(); TempTR.pasteHTML("&#01;"); // hier moet nog wat komen }[/code:1:c6ab2a9532] - In oud sla ik de gehele handel op. - met de volgende 2 regels markeer ik de juiste positie ? vervolgen moet ik nog naar voren en achteren scannen voor een tag ? indien tag aanwezig dan elementen overnemen anders leeg ? elementen bewerken ? nieuwe tag samenstellen en plaaten in oud ? handel weer terug zetten [b:c6ab2a9532]Nu het probleem [/b:c6ab2a9532]hoe kom ik weer op de juiste cursorpos. Als ik de handel terug zet, gaat de cursor aan het einde van de hele tekst staan.
Link naar reactie
waarom zou je eerst alles opslaan in oud? De hele bedoeling van een rangeobject is juist dat je op een bepaalde plek in de tekst dingen kan vervangen/toevoegen/verwijderen. Overigens zag ik vandaag dat het range-object een hele zwik dom2 methods kent voor in de nieuwste browsers. + Range + Range.cloneContents( ) + Range.cloneRange( ) + Range.collapse( ) + Range.compareBoundaryPoints( ) + Range.deleteContents( ) + Range.detach( ) + Range.extractContents( ) + Range.insertNode( ) + Range.selectNode( ) + Range.selectNodeContents( ) + Range.setEnd( ) + Range.setEndAfter( ) + Range.setEndBefore( ) + Range.setStart( ) + Range.setStartAfter( ) + Range.setStartBefore( ) + Range.surroundContents( ) + Range.toString( ) + RangeException de precieze werking ken ik allemaal niet van deze methods, maar welicht kun je er je voordeel mee doen. Verder is het niet mogelijk om de cursorpositie uit te lezen. Helaas. Ik zou het dus zo maken dat men of de al bestaande link eerst selecteerd, bijvoorbeeld door erop te klikken, waarbij je gebruik kunt maken van het event-object, of, als er niets geselecteerd is gewoon een nieuwe link plaatsen. Dan is het aan de gebruiker om eerst op de link te klikken, wat helemaal niet zo'n heel erge opoffering is voor de usability.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...