5 Stimmen

Was ist der einfachste Weg, um HTML-Zeilen in einer Tabelle über jQuery auszutauschen (nicht per Drag & Drop)

Was ist der einfachste Weg in jQuery, um die gesamte html für eine <TR> (einschließlich der tr selbst, nicht tr innerhtml) und tausche sie gegen eine andere aus? Ich bin messing um mit replaceWith, aber das ist Swapping die innerHtml und ich möchte die ganze TR html zu tauschen. scheint, wie es eine einfache Aufgabe für Jquery sein sollte. Ich denke, es muss eine Möglichkeit geben, die TRs durch Index und so einfach wie zu verweisen:

temp = table.children[4];
table.children[4] = table.children[7]
table.children[7] = temp;

natürlich ist das Pseudocode, aber ich bin auf der Suche nach etwas so einfach wie das in jQuery ...

7voto

BalusC Punkte 1034465

Am besten wäre es, sie in eine wiederverwendbare benutzerdefinierte Funktion zu verpacken:

$.fn.swap = function(other) {
    $(this).replaceWith($(other).after($(this).clone(true)));
};

Damit Sie es als verwenden können:

one.swap(other);

Le site clone(true) wird verwendet, damit auch Ereignisse berücksichtigt werden.

Hier ist ein SSCCE die den Austausch von Zeilen mit der nächsten Zeile (falls vorhanden) demonstriert:

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2078626 part I</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <script type="text/javascript">
            $.fn.swap = function(other) {
                $(this).replaceWith($(other).after($(this).clone(true)));
            };
            $(document).ready(function() {
                $('tr').css('cursor', 'pointer').click(function() {
                    $(this).swap($(this).next());
                });
            });
        </script>
    </head>
    <body>
        <table>
            <tbody>
                <tr><td>row1col1</td><td>row1col2</td><td>row1col3</td></tr>
                <tr><td>row2col1</td><td>row2col2</td><td>row2col3</td></tr>
                <tr><td>row3col1</td><td>row3col2</td><td>row3col3</td></tr>
                <tr><td>row4col1</td><td>row4col2</td><td>row4col3</td></tr>
                <tr><td>row5col1</td><td>row5col2</td><td>row5col3</td></tr>
            </tbody>
        </table>
    </body>
</html>

Hier ist ein SSCCE, das zeigt, wie es in Ihrem speziellen Fall verwendet werden kann:

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2078626 part II</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <script type="text/javascript">
            $.fn.swap = function(other) {
                $(this).replaceWith($(other).after($(this).clone(true)));
            };
            $(document).ready(function() {
                $('button.swap').click(function() {
                    $('#table tr:eq(1)').swap($('#table tr:eq(3)'));
                });
            });
        </script>
    </head>
    <body>
        <table id="table">
            <tbody>
                <tr><td>row1col1</td><td>row1col2</td><td>row1col3</td></tr>
                <tr><td>row2col1</td><td>row2col2</td><td>row2col3</td></tr>
                <tr><td>row3col1</td><td>row3col2</td><td>row3col3</td></tr>
                <tr><td>row4col1</td><td>row4col2</td><td>row4col3</td></tr>
                <tr><td>row5col1</td><td>row5col2</td><td>row5col3</td></tr>
            </tbody>
        </table>
        <button class="swap">swap rows 2 and 4</button>
    </body>
</html>

Beachten Sie, dass der Elementindex auf Null basiert, daher ist die 1 y 3 en :eq() .

0 Stimmen

Das ist der Grund, warum ich Jquery liebe. Es gibt immer eine einfache, elegante 1-Zeilen-Lösung für alles!

1voto

Tatu Ulmanen Punkte 119424

Das sollte genügen:

var sourceRow = $('tr').eq(7);
var targetRow = $('tr').eq(4);

targetRow.after(sourceRow.clone());
sourceRow.replaceWith(targetRow);

Im Klartext: Die Kopie der ersten Zeile wird nach der zweiten Zeile eingefügt, dann wird die ursprüngliche erste Zeile durch die zweite Zeile ersetzt.

Der Grund, warum ich einen Klon der ersten Zeile und nicht die erste Zeile selbst einfüge, ist, dass wir auf diese Weise die Position der ersten Zeile nicht verlieren und die zweite Zeile richtig positionieren können.

Wenn ich mich richtig erinnere, ist die Verwendung von replaceWith mit einem jQuery-Objekt nimmt das Element von seinem ursprünglichen Platz weg und fügt es an der neuen Stelle ein, aber wenn dies nicht der Fall ist, müssen Sie die targetRow auch. Ansonsten sollte dies funktionieren.

0voto

John Duff Punkte 36730

Basierend auf der Dokumentation replaceWith ( http://docs.jquery.com/Manipulation/replaceWith#content ) sollte tun, was Sie wollen, vielleicht ist der Selektor, den Sie verwenden etwas anderes als die tr zielt?

$("tr").click(function () {
  $(this).replaceWith("<tr><td>Something New!</td></tr>");
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X