Fügen Sie Zeilenumbrüche oder Leerzeichen zwischen Elementen hinzu, wenn Sie jQuery .append() verwenden

Lesezeit: 2 Minuten

Ich habe einen jQuery-Satz von Elementen, die ich von meinem DOM erhalte, indem ich aufrufe:

$(".some-selector");

Alle meine Elemente sind DIVs in jeweils einer eigenen Zeile. Meine DIVs sind gesetztes CSS (unter anderem)

display: inline-block;

wodurch verhindert wird, dass sie als Blockelemente (jedes in einer eigenen Zeile) gerendert werden.

Das Problem besteht darin, dass beim Rendern dieser DIVs Leerzeichen dazwischen stehen, da im Dokument zwischen den einzelnen Elementen ein Zeilenumbruch vorhanden ist. Damit fühle ich mich wohl. könnte ich natürlich gebrauchen float:left das würde diese Leerzeichen beseitigen, aber das ist nicht das, was ich will, weil ich andere Probleme mit der Containergröße usw.

So. Das Problem ist, dass ich die Reihenfolge dieser Elemente in meinem jQuery-Set bearbeite und sie dann neu rendere. Was ich im Wesentlichen mache, ist:

$(".some-selector").detach().manipulate().appendTo(".container");
// or equivalent
$(".container").append($(".some-selector").detach().manipulate());

Das Problem ist, dass sie wieder in das DOM eingefügt werden, aber ohne Zeilenumbrüche oder Leerzeichen …

Wie bekomme ich diese Zeilenumbrüche wieder hinein, wenn ich meine Elemente in DOM anfüge?

Benutzer-Avatar
gilly3

Nachdem Sie Ihre Elemente erneut eingefügt haben, fügen Sie mit etwas Leerzeichen an jedes von ihnen an .after():

$(".some-selector").after(" ");

http://jsfiddle.net/z5cFw/

  • Das funktioniert nicht – zwischen den SPAN-Elementen ist kein Leerzeichen: jsfiddle.net/u5jBS/1

    – Sime Vidas

    1. August 2011 um 23:38 Uhr

  • @Šime: Es funktioniert, aber sein Beispiel verwendet .append() Anstatt von .after() wie in der Antwort. jsfiddle.net/z5cFw

    – Benutzer113716

    1. August 2011 um 23:40 Uhr

  • Ich nehme an, es ist besser, den Fehler in der jsfiddle zu haben als in der geposteten Antwort, oder? 🙂 Danke für die Reparatur des jsfiddle!

    – gilly3

    1. August 2011 um 23:52 Uhr

  • Dies funktioniert, obwohl ich die jQuery-Dokumentation falsch verstanden habe, wenn es heißt: Ein oder mehrere zusätzliche DOM-Elemente, Arrays von Elementen, HTML-Strings oder jQuery-Objekte, die am Ende jedes Elements im Satz übereinstimmender Elemente eingefügt werden sollen. Ich dachte, es wird nach jedem Element angehängt, weil ich ein Set an ein Element angehängt habe, während sich die Dokumentation tatsächlich auf das Anhängen eines Elements an ein Set bezieht. 🙂 Danke Leute.

    – Robert Koritnik

    2. August 2011 um 0:04 Uhr

Du könntest benutzen map um nach jedem DIV einen TextNode mit einem Leerzeichen einzufügen:

$('.some-selector').detach().manipulate().map(function() {
    return [this, document.createTextNode(' ')];
}).appendTo('.container');

Live-Demo: http://jsfiddle.net/Hnv2T/

  • Das ist wirklich ein cleverer Sime. +1 auch von mir.

    – Robert Koritnik

    2. August 2011 um 0:01 Uhr

Der Code von Šime hat eine Einschränkung: Er fügt auch ein Leerzeichen nach dem letzten Element hinzu.

Hier ist eine Version, die dieses Leerzeichen vermeidet:

$('.some-selector').detach().manipulate().map(function (index, element) {
    return index === 0 ? element : [document.createTextNode(' '), element];
}).appendTo('.container');

Live-Demo: http://jsfiddle.net/tqx19m3L/

1054260cookie-checkFügen Sie Zeilenumbrüche oder Leerzeichen zwischen Elementen hinzu, wenn Sie jQuery .append() verwenden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy