Toon posts:

[javascript] insertBefore probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een Cross Browser rich text editor en ben al zover dat ik in een tabel een cel wil splitsen als die een minimum colspan heeft van 2. Hiervoor wil ik een cell aanmaken vóór de geselecteerde cel. De methode insertBefore zou dan voor mij gewoon moeten werken (http://msdn.microsoft.com.../methods/insertbefore.asp en http://www.mozilla.org/do...dom_el_ref47.html#1028897).

Hij werkt ook wel, maar alleen bij Mozilla. Ik heb het volgende hierop bedacht:
Java:
1
2
3
4
5
6
7
       // parentNode is altijd een TR, daar wordt hiervoor wel voor gezorgd
       if (isIE) {
          parentNode.insertCell(startCell.cellIndex);
       }
       else if (isGecko) {
          parentNode.insertBefore(newCell,startCell);
       }

Zoals ik al zei, werkt dit wel, maar echt mooi vind ik het niet. Ziet iemand misschien wat ik over het hoofd zie?

Verwijderd

Als we nou eens wat meer code zouden zien van de methode die je gebruikt om de cell te splitsen. Ik snap an sich al niet wat je precies wilt.
"in een tabel een cel wil splitsen als die een minimum colspan heeft van 2" :?
Geef eens wat HTML tabel code en vertel aan de hand van die code wat er de bedoeling is.

Verwijderd

Topicstarter
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function splitCell(rte, command) 
{
    var startNode;
    var done = false;

    if (isIE) {
        startNode = rng.parentElement();
    }
    else if (isGecko) {
       startNode = rng.startContainer.parentNode;
    }

    // Find a parent element which is a TD
    while (startNode != null && startNode.nodeName != 'TD') {
       startNode = startNode.parentNode;
    }

    var nextNode = null;
    //have we found a TD element with a colspan minimum of 2?
    if (startNode != null && startNode.nodeName == 'TD' && startNode.colSpan >= 2)
    {  
       var newCell = document.createElement('TD');
       newCell.colSpan = Math.floor(startNode.colSpan / 2);
       newCell.innerHTML = " ";
       parentNode = startNode.parentNode;
       if (isIE) {
          parentNode.insertCell(startNode.cellIndex);
       }
       else if (isGecko) {
          parentNode.insertBefore(newCell,startNode);
       }
       
       startNode.colSpan = startNode.colSpan - newCell.colSpan;
       if (startNode.colSpan == 1) {
          startNode.removeAttribute('colspan');
       }
       if (newCell.colSpan ==  1) {
          newCell.removeAttribute('colspan');
       }
    }
    else {
       alert('Please place your cursor in a cell with a span minimum of 2 cells!');
    }
}


stel het volgende:
HTML:
1
2
3
    <table>
       <tr><td>1</td><td colspan=2>2</td></tr>
    </table>


Wanneer je splitCell uitvoert voor cel met inhoud 2 en colspan 2 verandert de tabel in :
HTML:
1
2
3
    <table>
       <tr><td>1</td><td></td><td>2</td></tr>
    </table>


Het was trouwens alleen een vraag naar de werking van 1 methode. De oplossing is al goed...

[ Voor 11% gewijzigd door Verwijderd op 14-04-2005 14:22 ]


Verwijderd

Zou je ook nog kunnen vertellen wat er fout gaat in Internet Explorer? Krijg je een dikke vette foutmelding, of gewoon onverwacht gedrag?

Verwijderd

Topicstarter
Internet explorer geeft het volgende foutmelding:
Error : invalid argument
Code : 0
Char : 5

Dit gebeurt dus als ik
Java:
1
2
3
       if (isIE) {
          parentNode.insertCell(startNode.cellIndex);
       }

vervang door:
Java:
1
2
3
       if (isIE) {
          parentNode.insertBefore(newCell,startNode);
       }