Avatar billede Slettet bruger
16. december 2004 - 17:33 Der er 3 kommentarer og
1 løsning

Manipulering af DOM vha. Javascript

Jeg prøver på at få et javascript til at fungere, der skal kunne flytte en række i en tabel (med et id), faktisk blot swappe to rækker, det jeg allerede har lavet er:

<script type="text/javascript">
function attachListener(elementId, event, listener) {
    elm = document.getElementById(elementId);

    // If User Agent follows W3C recommandations...
    if (typeof document.implementation != "undefined" && document.implementation.hasFeature("Events", "2.0")) {
        elm.addEventListener(event, listener, false);
    // Else, if User Agent is (dreaded) Internet Explorer
    } else if (typeof document.attachEvent != "undefined") {
        ieEvent = "on" + event;
        elm.attachEvent(ieEvent, listener);
    }
}

Men det er som om at den ikke tegner den nye række, men blot erstatter den eksisterende. Scriptet skal fungere både i IE og Mozilla (og jeg kan desværre kun teste i Mozilla).

Personen som får det til at fungere, eller blot får den til at opdatere tabellen på skærmen (i Mozilla) får de 60 point.

Mvh Anders

    var selected;

    function moveListener(event) {
        cell = (event.target || event.srcElement).nodeName;
        if (cell.toUpperCase() == "TD") {
            row = (event.target || event.srcElement).parentNode;

            if (selected != null && selected.rowIndex == row.rowIndex) {
                row.style.background = "";
                selected = null;
            } else {
                table = document.getElementById("sortTable");

                for (i=0; i<table.rows.length; i++) {
                    table.rows[i].style.background = "";
                }

                if (selected == null) {
                    row.style.background = "#4a82ad";
                    selected = row;
                } else {
                    table.insertRow(row.rowIndex);
                    newRow = table.rows[row.rowIndex];

                    for (i=0; i<selected.cells.length; i++) {
                        newRow.cells[i].innerHTML = selected.cells[i].innerHTML;
                    }
                    selected = null;
                }
            }
        }
    }

    attachListener("sortTable", "click", moveListener);
</script>
Avatar billede Slettet bruger
16. december 2004 - 17:34 #1
Hrmmmm, det første javascript der er i spørgsmålet, skal naturligvis være inden i script-tagget...
Avatar billede olebole Juniormester
16. december 2004 - 20:38 #2
<ole>

<script type="text/javascript">
function attachListener(elementId, event, listener) {
    var elm, ieEvent;
    elm = document.getElementById(elementId);
    // If User Agent follows W3C recommandations...
    if (typeof document.implementation != "undefined" && document.implementation.hasFeature("Events", "2.0")) {
        elm.addEventListener(event, listener, false);
    // Else, if User Agent is (dreaded) Internet Explorer
    } else if (typeof document.attachEvent != "undefined") {
        ieEvent = "on" + event;
        elm.attachEvent(ieEvent, listener);
    }
}

var selected;
function moveListener(event) {
    var table, tbody, row, cell, tmpRow1, tmpRow2;
    cell = (event.target || event.srcElement).nodeName;
    if (cell.toUpperCase() == "TD") {
        row = (event.target || event.srcElement).parentNode;

        if (selected != null && selected.rowIndex == row.rowIndex) {
            row.style.background = "";
            selected = null;
        } else {
            table = document.getElementById("sortTable");

            for (i=0; i<table.rows.length; i++) {
                table.rows[i].style.background = "";
            }

            if (selected == null) {
                row.style.background = "#4a82ad";
                selected = row;
            } else {
                tmpRow1 = selected.cloneNode(true);
                tmpRow2 = row.cloneNode(true);
                tbody = table.getElementsByTagName("TBODY")[0];
                tbody.replaceChild(tmpRow2, selected);
                tbody.replaceChild(tmpRow1, row);
                selected = null;
            }
        }
    }
}
window.onload = function() {
    attachListener("sortTable", "click", moveListener);
}
</script>

/mvh
</bole>
Avatar billede Slettet bruger
17. december 2004 - 09:06 #3
Smukt, virker jo perfekt (i hvert fald i Firefox, skal lige ha' det testet i Internet Explorer, men mon ikke det også virker der?.

Du får i hvert fald pointene, og tusind tak for hjælpen :-)
Avatar billede olebole Juniormester
17. december 2004 - 15:33 #4
Takker for points ... og jo, den er skam for en sikkerheds skyld testet i IE, FF og Opera  :)
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