Toon posts:

[JS] Bold typen zonder iets te selecteren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey,

Ik heb een stukje JS code waar ik niet helemaal uit kom. Ik wil dus, wanneer je niets selecteert maar wel op bold klikt, dat je vanaf dat punt in je editor bold kunt typen.
Nu probeerde ik met een gewone pasteHTML gewoon een b tag weg te schrijven. Dit heeft tot resultaat dat de b tag er wel staat maar je daar achter begint met typen dus weer gewoon normaal type, niet bold dus.
Wanneer ik nu een spatie mee stuur, dan kan ik wel bold typen alleen dan heb ik een spatie staan..

Toelichting met code:
JavaScript:
1
2
3
4
5
6
7
8
9
if(rng.text == '')
{
    rng.pasteHTML("<"+ tag +">&nbsp;</"+ tag +">");
    rng.collapse(true);
    rng.moveStart("character", -1);
    rng.moveEnd("character", 0);
    rng.select();
}
else rng.pasteHTML("<"+ tag +">"+ rng.text +"</"+ tag +">");
Als ik alleen dit zou doen:
JavaScript:
1
2
3
4
5
if(rng.text == '')
{
    rng.pasteHTML("<"+ tag +"></"+ tag +">");
}
else rng.pasteHTML("<"+ tag +">"+ rng.text +"</"+ tag +">");
Dan zou ik dus niet kunnen typen in bold want de cursor komt dan voor of achter de bold tag te staan. Met een spatie erin, kan ik de spatie selecteren en wanneer je dan doortypt, typ je in bold. Alleen ja.. dit is een beetje een ranzige oplossing.. Kan iemand aangeven of dit ook anders kan?

Overigens werk ik nu met pasteHTML (IE) en zou ik het graag horen als dit ook mogelijk zou zijn met een DOM oplossing in IE.

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Ik snap niet wat je precies doet. Schrijf je nu HTML tags weg naar een textarea, of gebruik je designMode?

Als je designmode (of midas voor Fx) gebruikt, hoef je je helemaal niet druk te maken om ranges, dan kun je gewoon execCommand gebruiken.

Ik ontken het bestaan van IE.


Verwijderd

Topicstarter
Sorry, ik gebruik dus een iframe met designmode.
Wat ik dus niet wil is gebruik maken van execCommand. Daarom ben ik ook met deze functie bezig.

Verwijderd

Topicstarter
Iemand nog een idee?

  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 10-02 11:55

koekiemonster

want a cookie

Ls,

Ik zit momenteel met hetzelfde probleem.

Stukje code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
sel = DHTMLSafe.DOM.selection.createRange();
if(sel.text.length > 0) {
   var endtag = insertChar(tgname, '/', 2);
   sel.pasteHTML(tgname + sel.htmlText + endtag);
   sel.select();
} else {
alert('new');
   DHTMLSafe.DOM.body.ExecCommand("formatblock", tgname);
}
  DHTMLSafe.focus();
  DHTMLSafe.DOM.body.focus();
}


Kortom, als er een selectie is gemaakt, die uitvoeren dmv pasteHTML, anders hebben we te maken met een nieuwe trigger en dus een execcommand uitvoeren, maar dat werkt niet. Iemand enig idee hoe ik vanaf de cursor kan starten met een H1,H2, Address etc?

[webhero.nl]


  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

mag ik vragen waarom je geen execCommand wil gebruiken?

Raar... Is zo gek nog niet


  • koekiemonster
  • Registratie: Maart 2001
  • Laatst online: 10-02 11:55

koekiemonster

want a cookie

Het probleem is nu nog vager.
Ik gebruik nu een execcommand, maar als ik kies voor een H1, dan wordt het gehele block H1, maak ik dan een selectie en kies vervolgens voor 'normaal <p>' dan wordt dit overruled door de H1.

iemand enig idee hoe ik dit kan oplossen.
Daarnaast speelt nog een klein probleempje in onderstaande code.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function ae_insertformat(tgname, num) {
  //insert a formattag  
cancelFrame();
alert(tgname);

DHTMLSafe = aeObjects[num];
DHTMLSafe.focus();
DHTMLSafe.DOM.body.focus();

sel = DHTMLSafe.DOM.selection.createRange();
if(sel.text.length > 0) {
   var endtag = insertChar(tgname, '/', 2);
   sel.pasteHTML(tgname + sel.htmlText + endtag);
   sel.select();
} else {
//DHTMLSafe.ExecCommand('FormatBlock',false,'tag');
   DHTMLSafe.ExecCommand(DECMD_SETBLOCKFMT, OLECMDEXECOPT_DODEFAULT, tgname);
}
  DHTMLSafe.focus();
  DHTMLSafe.DOM.body.focus();
}

Een selectie zorgt ervoor dat het gewijzigde block op een aparte regel komt in plaats van inline. Dit terwijl ik toch gewoon gebruik maak van pasteHTML.

Als ik alleen de Execcommand gebruik, dan pakt hij wel extreem veel regels (kortweg alle regels die beschikbaar zijn in de editors). Een selectie werkt dus niet met de execcommand, of mis ik iets?

[ Voor 12% gewijzigd door koekiemonster op 18-07-2006 15:39 ]

[webhero.nl]

Pagina: 1