Avatar billede alvion Nybegynder
28. maj 2002 - 08:54 Der er 10 kommentarer og
1 løsning

Hvordan oprettes textRange omkring et markeret billede

Jeg sidder og leger med MS' DHTML editor komponent (på en webside).

Hvis vi nu forestiller os at komponenten er navngivet "tbContentElement", så vil følgende kode oprette en TextRange, hvis jeg har markeret noget tekst i editoren.

var idEdit = tbContentElement.DOM;
var sText = idEdit.selection.createRange();

alert(sText.htmlText) <-- Printer teksten


Hvis jeg nu istedet har indsat et billede og det er markeret med et klik (så der kommer "håndtag" omkring billedet). Så virker koden ikke som forventet.

Istedet bliver der oprettet en ControlRange collection og jeg kan ikke finde ud af, hvordan jeg laver det om til en TextRange, der kun indeholder billedet.

Det jeg gerne skulle frem til er, at ovenstående alert(sText.htmlText) viser:

<img src="mypicture.gif">

Hvordan gør jeg det? Jeg har prøvet at kalde controlRange's select(), men det hjalp ikke rigtig.
Avatar billede pelkjaer Nybegynder
28. maj 2002 - 09:03 #1
Kan du ikke bare smide en border="0" på dit billede?
Avatar billede alvion Nybegynder
28. maj 2002 - 09:28 #2
Ehm... Hvad har det lige med mit spørgsmål at gøre?
Avatar billede pelkjaer Nybegynder
28. maj 2002 - 09:35 #3
Tja ikke så meget, og dog lidt alligevel vil jeg sige. Jeg ved af egen erfaring med ms edit comp. at når man markerer et pic så kommer der et håndtag, -og en border på.

Men jeg skal ikke forstyrre mere.
Avatar billede jumper Nybegynder
31. maj 2002 - 11:18 #4
En ControlRange er en samling af ikke-text objekter, og derfor har den ikke en generel htmlText property. Dog har hvert element i rangen stadig sine outerHTML og innerHTML properties, som du stadig kan få fat i.

var idEdit = tbContentElement.DOM;
var oRange = idEdit.selection.createRange();
if(oRange.length){
  // ControlRange
  alert( oRange.item(0).outerHTML );
} else {
  // TextRange
  alert( oRange.htmlText );
}

/Thor
Avatar billede alvion Nybegynder
31. maj 2002 - 12:20 #5
Ja den har jeg også selv tænkt. Jeg finder teksten via outerHTML, hvorefter jeg opretter en TextRange ved at søge på teksten. Så har jeg bare problemet, hvis samme billede forefindes i teksten to steder.....
Avatar billede alvion Nybegynder
31. maj 2002 - 12:24 #6
Det skal bruges i sammenhæng med at jeg vil sætte et link omkring. Jeg kan vise eksemplet hvor jeg vil bruge det:
============================================
var idEdit = tbContentElement.DOM;

if (idEdit.selection.type == "Control") {
    var ctrlrng = idEdit.selection.createTextRange();
    // Her skal jeg lave mit "fusk" så jeg får fat i billedet som en TextRange
}
else {
    var sText = idEdit.selection.createRange();
}

if (!sText=="") {
    var url = "";
    if (sText.parentElement().tagName == "A")
        url = sText.parentElement().href;

    url = showModalDialog("dlg_editlink.php", url, "font-family:Verdana; font-size:12; dialogWidth:600px; dialogHeight:400px");

    if (url != null) {
        if (sText.parentElement().tagName == "A") {
            sText.parentElement().href = url;
        }
        else {
            s = "<a href='" + url + "'>" + sText.htmlText + "</a>";
            sText.pasteHTML(s);
        }
    }
}
Avatar billede alvion Nybegynder
31. maj 2002 - 14:18 #7
Hmm... TextRange.findText() har problemer med at søge i html-koderne?

str = '<IMG border=0 hspace=0 src="upload/billede399.jpg">';
var sText = idEdit.body.createTextRange();
sText.findText(s);

findText(s); returnerer "false" selvom teksten i str findes. Den er faktisk copy/pastet fra teksten.

Søger jeg på et "almindeligt" ord i teksten, så kan findText() godt finde det. Det virker som om, at findText() ikke er beregnet på at søge efter karakter-sekvenser men mere normal-tekst (prosa mv.)
Avatar billede alvion Nybegynder
29. august 2002 - 07:41 #8
Det var der ikke meget held ved...
Avatar billede 0verwrite Nybegynder
24. februar 2003 - 01:58 #9
...Er der fundet løsning på dette spørgsmål?
Avatar billede alvion Nybegynder
24. februar 2003 - 09:12 #10
Desværre ikke - så jeg må hellere lukke.....
Avatar billede 0verwrite Nybegynder
24. februar 2003 - 10:21 #11
hmm fandt ellers svaret!!!
...Du kan åbne det ønskede resultat ved at hive outerhtml med over i din modalessdialog... når du så indsætter linket kør du en execCommand('cut'); og efter det indsætter par pastehtml outerhtml + linket omkring... spiller 500!

kan lige sende noget kode hvis du ikke fattede så meget :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester