Avatar billede hoppe11 Nybegynder
19. august 2009 - 12:22 Der er 15 kommentarer og
1 løsning

deleteRow - flere tabeller i i rækken

jeg har et lille script som skal slette rækker fra bunden i en tabel..

men efter der er begyndt at være tabeller indeni selve tabellen jeg skal slette fra går det i koks og den tæller åbenbart samtlige tr elementer i alle tabeller i mit 'tbl' element

hvad kan man lige gøre ved det?

var num_tr = tbl.getElementsByTagName('tr').length;
while(num_tr > 50)
{
    tbl.deleteRow(num_tr-1);
    num_tr--;
}
Avatar billede olebole Juniormester
19. august 2009 - 13:14 #1
<ole>

Det nærmeste, man kan komme det er: Du skal nok gøre noget andet  =)

Det er svært at råde, når man ikke kan se din markup. Prøv med et link til siden

/mvh
</bole>
Avatar billede hoppe11 Nybegynder
19. august 2009 - 14:31 #2
det kunne se sådan her ud

det er tr elementerne i 'tbl' tabellen jeg skal slette :)

<table id="tbl">
    <tr>
        <td>
            første række
            <table>
                <tr>
                    <td>tst</td>
                    <td>tst</td>
                </tr>
                <tr>
                    <td>tst</td>
                    <td>tst</td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
            anden række
            <table>
                <tr>
                    <td>tst</td>
                    <td>tst</td>
                </tr>
                <tr>
                    <td>tst</td>
                    <td>tst</td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
            tredje række
            <table>
                <tr>
                    <td>tst</td>
                    <td>tst</td>
                </tr>
                <tr>
                    <td>tst</td>
                    <td>tst</td>
                </tr>
            </table>
        </td>
    </tr>
</table>
Avatar billede olebole Juniormester
19. august 2009 - 15:42 #3
Ja, det er jeg helt enig i - men ser det sådan ud? Man kan ikke lave en helt generisk løsning, så det er ikke uvæsentligt, hvordan koden præcist ser ud  =)
Avatar billede sw_red_6 Nybegynder
19. august 2009 - 16:50 #4
ikke fordi jeg vil modsige oleboles udsagn, men kan det ikke gøres sådan her:

var num_rows = tbl.rows-1;
while(num_tr > 50)
{
    tbl.deleteRow(num_tr-1);
    num_tr--;
}

Jeg har overhovedet ikke testet og her ikke tjekket standarder eller noget, men burde det ikke være generisk nok?
Avatar billede olebole Juniormester
20. august 2009 - 09:10 #5
Man kan godt slette alle rækker enkeltvis, men det ville være betydeligt smartere og hurtigere kun at slette i den yderste tabel  ;o)
Avatar billede sw_red_6 Nybegynder
20. august 2009 - 09:16 #6
Da kun hvis man skal have fjernet alle rækkerne.. eller misforstår jeg hvad du mener..?
Ud fra det hoppe11 skriver så skal de første 50 rækker jo ikke fjernes..
Avatar billede majbom Novice
20. august 2009 - 09:19 #7
-> sw_red_6 - problemet er jo at #0's kode slette tr'er inde i en tabel som er i en td i den oprindelige tabel.

ole siger at det er smartere bare at slette rækkerne i den oprindelige tabel, ikke hele tabellen.
Avatar billede hoppe11 Nybegynder
20. august 2009 - 09:25 #8
@ ole

hvad er dit forslag så? :)
Avatar billede olebole Juniormester
20. august 2009 - 09:34 #9
At du læser #3
Avatar billede hoppe11 Nybegynder
20. august 2009 - 09:42 #10
jeg har noget her, men num_tr bliver ikke alert'et.. trods jeg får returneret 'tst' hver gang?

som om num_tr++ ikke gør noget, selvom jeg får 'tst' hver gang den rammer et rigtigt tr element??

function get_parent(elm, tag_name)
{
    tag_name = tag_name.toLowerCase();
    for(; elm.tagName.toLowerCase()!=tag_name; elm=elm.parentNode);
   
    return elm;
}

var tr_obj = tbl.getElementsByTagName('tr');
var num_tr = 0;
for(var key in tr_obj)
{
    if(get_parent(tr_obj[key], 'table').id == 'table_activity')
    {
        num_tr++;
        alert('tst');
    }
}
alert(num_tr);
Avatar billede hoppe11 Nybegynder
20. august 2009 - 09:50 #11
hmm..

tagName is NULL or not an object?

for(; elm.tagName.toLowerCase()!=tag_name; elm=elm.parentNode);
Avatar billede hoppe11 Nybegynder
20. august 2009 - 09:55 #12
hvordan kan man undgå at

var tr_obj = tbl.getElementsByTagName('tr');

undgår at returnerer funktioner osv?.. men den burde da vel også kun returnere elementer med det pågældende tagname?
Avatar billede sw_red_6 Nybegynder
20. august 2009 - 14:17 #13
splazz-> Det er da også intentionen med det jeg skrev..
At der så mangler en length for at det kan virke er en mindre vigtig detalje ;o)

Hvis det ikke virker kan jeg kun tilmelde mig kommentar #3..
Avatar billede olebole Juniormester
20. august 2009 - 16:25 #14
Jeg tillader mig hermed at være ligeså rystende ligeglad med dette problems løsning, som spørgeren er!
Avatar billede hoppe11 Nybegynder
16. oktober 2010 - 17:51 #15
smid et svar ole :)
Avatar billede hoppe11 Nybegynder
01. november 2010 - 00:55 #16
lukker
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