Avatar billede mikkelk Nybegynder
17. april 2005 - 18:31 Der er 6 kommentarer og
1 løsning

Markere element

Jeg mangler en funktion der kan makere det nærmeste HTML-objekt når man klikker på det. Jeg får i forvejen fat i objektet gennem en onclick event:
    if (isIE) {
        strElement = evt.srcElement;
    } else {
        strElement = evt.target;
    }
Men jeg kan ikke rigtigt finde ud af at markere hele dette objekt - håber der er nogle der kan komme med lidt hjælp til det.
Avatar billede olebole Juniormester
17. april 2005 - 21:31 #1
<ole>

if (isIE) {
    strElement = evt.srcElement;
} else {
    strElement = evt.target;
}
strElement.style.backgroundColor = "red";

- så bliver det element, du klikker på, farvet rødt

/mvh
</bole>
Avatar billede mikkelk Nybegynder
18. april 2005 - 08:03 #2
Ok :-) Jeg havde vidst ikke fået det forklaret helt grundigt nok. Med markering mente jeg ligesom når du markerer et stykke tekst med musen.
Det bruges i en iframe der er gjort contenteditable.
Avatar billede olebole Juniormester
18. april 2005 - 11:04 #3
Så er du ude i noget helt andet. Så må du lægge noget kode  :)
Avatar billede mikkelk Nybegynder
18. april 2005 - 19:29 #4
oki :-)
Jeg kører det hele fra javascript (en del af koden er hugget direkte fra http://www.kevinroth.com/rte/demo.htm)
Min iframe skrives ud af en funktion:

document.writeln('<iframe id="' + rte + '" name="' + rte + '" class="RTEIframe" style="width:548px;height:' + height + 'px;" frameborder="0"></iframe>');

Følgende funktion køres:

function enableDesignMode(rte, html, readOnly) {
    var frameHtml = "<html id=\"" + rte + "\">\n";
    frameHtml += "<head>\n";
    //to reference your stylesheet, set href property below to your stylesheet path and uncomment
    if (cssFile.length > 0) {
        frameHtml += "<link media=\"all\" type=\"text/css\" href=\"" + cssFile + "\" rel=\"stylesheet\">\n";
    } else {
        frameHtml += "<style>\n";
        frameHtml += "body {\n";
        frameHtml += "    background: #FFFFFF;\n";
        frameHtml += "    margin: 0px;\n";
        frameHtml += "    padding: 0px;\n";
        frameHtml += "}\n";
        frameHtml += "</style>\n";
    }
    frameHtml += "</head>\n";
    frameHtml += "<body>\n";
    frameHtml += html + "\n";
    frameHtml += "</body>\n";
    frameHtml += "</html>";
   
    if (document.all) {
        var oRTE = frames[rte].document;
        oRTE.open();
        oRTE.write(frameHtml);
        oRTE.close();
        if (!readOnly) oRTE.designMode = "On";
    } else {
        try {
            if (!readOnly) document.getElementById(rte).contentDocument.designMode = "on";
            try {
                var oRTE = document.getElementById(rte).contentWindow.document;
                oRTE.open();
                oRTE.write(frameHtml);
                oRTE.close();
                if (isGecko && !readOnly) {
                    //attach a keyboard handler for gecko browsers to make keyboard shortcuts work
                    oRTE.addEventListener("keypress", kb_handler, true);
                }
            } catch (e) {
                alert("Error preloading content.");
            }
        } catch (e) {
            //gecko may take some time to enable design mode.
            //Keep looping until able to set.
            if (isGecko) {
                setTimeout("enableDesignMode('" + rte + "', '" + html + "', " + readOnly + ");", 10);
            } else {
                return false;
            }
        }
    }
    var oRTE = document.getElementById(rte).contentWindow.document;
    F_addEvents(oRTE, ["keydown", "keypress", "mousedown", "mouseup", "drag"],
            function (event) {
                return updateConfigs(isIE ? document.getElementById(rte).contentWindow.event : event);
            });
}

F_addEvent = function(el, evname, func) {
    if (isIE) {
        el.attachEvent("on" + evname, func);
    } else {
        el.addEventListener(evname, func, true);
    }
};

F_addEvents = function(el, evs, func) {
    for (var i in evs) {
        F_addEvent(el, evs[i], func);
    }
};

Og så denne når man klikker på et element:
function updateConfigs(evt){
    if (isIE) {
        strElement = evt.srcElement;
    } else {
        strElement = evt.target;
    }
end function

Det jeg så egentlig gerne vil er at kunne markere dette element, eller rettere sagt 'fange' elementet og smide det i et link, sammen med underliggende elementer som man så kan klikke på.

Kan jo sagtens finde frem til de underliggende elementer med parentNode - men det med at markere dem og gemme dem i links - det går ikke for godt :-D
Avatar billede mikkelk Nybegynder
19. april 2005 - 17:27 #5
Ingen bud på hvordan det kan gøres???
Avatar billede mikkelk Nybegynder
19. april 2005 - 19:43 #6
Bare lidt hints til hvad der skal til? :-)
Avatar billede mikkelk Nybegynder
26. juni 2005 - 12:48 #7
Ok...
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