Avatar billede thanders Nybegynder
29. oktober 2003 - 20:43 Der er 12 kommentarer og
1 løsning

ContentEditable +dynamiske buttons

Hei,
I contenteditable mode, hvordan kan jeg gjøre mine tabell celle operasjoner(add,delete osv) buttons aktive når brukeren har plasert markøren inne i en celle.

mvh,
Thomas A.
Avatar billede smirnoff Nybegynder
29. oktober 2003 - 20:53 #1
lav en onbeforeeditfocus event på dit contenteditable element ... i den fundtion får du fat i en TextRange ud fra det sted hcor markøren står ...

lav en funktion som via en parameter får TextRange'ns parentElement - check dette elements nodeName .. er det TD så stop og aktiver dine knapper, hvis ikke forsæt med brug af node.parentNode recurisiv op gennemtræet til du støder på ed TD-node..

Jeg har ikke selv fundet en mere optimal funktion ... så hvis du hitter ud af noget hører jeg gerne om det :)
Avatar billede smirnoff Nybegynder
29. oktober 2003 - 20:55 #2
...og undskyld min ustylige stavning ...
Avatar billede thanders Nybegynder
29. oktober 2003 - 21:48 #3
Takker, dette syntes jeg var en optimal løsning, og passet perfekt inn i min situasjon. Jeg er norsk og legger ikke merke til din stavemåte ;-)

Thomas A.
Avatar billede olebole Juniormester
30. oktober 2003 - 00:02 #4
<ole>

Du kunne vel også lægge en onclick-handler på hver div'et:

<div contenteditable
    onclick="alert('Elementets tag: '+event.srcElement.tagName+'\nCellens tekst: '+event.srcElement.innerHTML);">
<table cellspacing="5" cellpadding="0" border="1">
<tr>
    <td>BLABLA 0</td>
    <td>BLABLA 1</td>
    <td>BLABLA 3</td>
    <td>BLABLA 4</td>
</tr>
</table>
</div>

/mvh
</bole>
Avatar billede smirnoff Nybegynder
30. oktober 2003 - 08:52 #5
Hvad så i tilfældet hvor der er tags i td'en ... f.eks:
..
<td>blablab <span> jeg trykker her ... </span> bla bla </td>
..
Avatar billede olebole Juniormester
30. oktober 2003 - 17:29 #6
Så tæller man naturligvis rekursivt op gennem træet, til en <td> nåes. Men man slipper stadig med en betydelig enklere løsning end, hvis man ustandselig skal oprette et hav af textRanges.

Ikke mindst kan det have væsentlig betydning i større JS-applikationer (som f.eks. et avanceret CMS) - og ikke mindst i IE, som jo er herostratisk berømt for sin elendige garbage-collection  :)
/mvh
Avatar billede olebole Juniormester
30. oktober 2003 - 17:44 #7
En lidt 'sexy' løsning kunne være:

<script type="text/JavaScript">
var actTD = false;
function bla(elm) {
    for (i=0; elm.tagName!="TD"; i++,elm=elm.parentElement);
    actTD = elm;
}
</script>

<div contenteditable onclick="bla(event.srcElement)">
<table cellspacing="5" cellpadding="0" border="1">
<tr>
    <td>BLABLA 0</td>
    <td><span>Dette ligger i et span </span>BLABLA 1</td>
    <td>BLABLA 3</td>
    <td>BLABLA 4</td>
</tr>
</table>
</div>

<button onclick="if(actTD)alert(actTD.innerHTML)">TEST FOR AKTIV TD</button>
Avatar billede olebole Juniormester
30. oktober 2003 - 17:56 #8
Eller bedre:

<script type="text/JavaScript">
var actTD = false;
function bla(elm) {
    for (i=0; elm.tagName!="TD"&&elm.id!="editor"; i++,elm=elm.parentElement );
    return (elm.tagName=="TD")? elm : false;
}
</script>

<div id="editor" contenteditable onclick="actTD=bla(event.srcElement)">
<table cellspacing="5" cellpadding="0" border="1">
<tr>
    <td>BLABLA 0<br>
    <table cellspacing="0" cellpadding="0" border="1">
    <tr>
        <td>Celle i nested tabel</td>
    </tr>
    </table>
    </td>
    <td><span>Dette ligger i et span </span>BLABLA 1</td>
    <td>BLABLA 3</td>
    <td>BLABLA 4</td>
</tr>
</table>
<div><b>Tekst udenfor TD</b></div>
</div>
<button onclick="if(actTD)alert(actTD.innerHTML)">TEST FOR AKTIV TD</button>

/mvh
Avatar billede smirnoff Nybegynder
30. oktober 2003 - 22:53 #9
hohoho - en noget mere optimeret løsning på jeg sige når man tænker på Thomas' spørgsmål (at den sku 'aktivere' en knap) :) ...

..forøvrigt ... accepterer du mit svar Thomas, eller hur ??!
Avatar billede olebole Juniormester
30. oktober 2003 - 23:12 #10
Ehhhhh ...... hvordan i alverden ville du lave en løsning, uden at kende resten af koden? Det burde vel ikke være et problem, når der er en global variabel at spørge på  :o)
/mvh
Avatar billede smirnoff Nybegynder
31. oktober 2003 - 08:52 #11
så lad os kalde det et løsningsforslag ... og kun stilet til dette isolerede spørgsmål ... resten af koden eller hele applikationen kender jeg seføli ingenting til
Avatar billede olebole Juniormester
31. oktober 2003 - 14:22 #12
Det glæder mig, vi er enige om, det vr noget vrøvl, du fik skrevet i (30/10-2003 22:53:11)  :)
/mvh
Avatar billede thanders Nybegynder
31. oktober 2003 - 14:44 #13
Sånn smirnoff, ditt svar er akseptert, løsningen din fungerer bra så langt ;-)
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