2009-11-12 5 views
16

Eine nette Sache mit jQuery ist, dass die Syntax (z. B. beim Verketten) dem Skript ermöglicht, mehrere Zeilenumbrüche zu überspannen, um Formatierung und Lesbarkeit zu erleichtern.Formatieren von jQuery-Strings, die sich über mehrere Zeilen erstrecken sollten

Gibt es eine äquivalente/bevorzugte Methode, wenn eine große HTML-Kette hinzugefügt wird?

Zum Beispiel wäre es schön, so etwas zu tun:

$("#theObject") 
    .doSomething() 
    .append(" 
     <div> 
      <div> 
        Hello World 
      </div> 
     </div> 
    ") 

das nicht, aber funktioniert ist es so etwas wie das zu erleichtern, HTML lesen in einem Skript jQuery formatiert ?

+0

+1 Gute Frage. Das war immer eine lästige Situation für mich. –

Antwort

31

eine \ hinzufügen am Ende jeder Zeile

$("#theObject").doSomething() 
.append(" 
    <div>\ 
     <div>\ 
       Hello World\ 
     </div>\ 
    </div>\ 
") 

Bearbeiten 2016:

Wenn Sie ES6 (ES2015) verwenden, können Sie jetzt template literals verwenden.

+0

Das scheint zu funktionieren !? Also, ist das jQuery Zentrik-Syntax? –

+0

Ich würde argumentieren, dass es gültig ist. Es funktioniert auch in fast jeder anderen Programmiersprache. –

+1

Ja, das ist ein gültiges Javascript. Ich denke, in der Vergangenheit musste ich Leerzeichen vor die Schrägstriche setzen, um es in allen Browsern funktionieren zu lassen –

6
$("#theObject") 
.doSomething() 
.append(
    "<div>" 
     +"<div>" 
       +"Hello World" 
     +"</div>" 
    +"</div>" 
); 

Es wäre am besten Praxis Ihre .append() Inhalte als var zu laden, etwa so:

var append_me = 
    "<div>" 
     +"<div>" 
       +"Hello World" 
     +"</div>" 
    +"</div>"; 

$("#theObject").doSomething().append(append_me); 
+0

iamkoa ... schön! Im Nachhinein einfach und offensichtlich, aber etwas, das ich nicht bedacht hatte. –

0
var str = '<div>'; 
str += '<div>'; 
str += 'Hello World'; 

$("#theObject") 
    .doSomething() 
    .append(str) 
+0

Das war mein erster Gedanke. Nicht perfekt, aber besser lesbar als alles in eine Zeile zu stopfen. Gibt es einen Leistungseinbruch? Hat die mehrfache Verkettung einer deklarierten Variablen Auswirkungen auf die Performance? –

+0

Es sollte nicht in aktuellen Browsern. Früher gab es einen Performance-Hit und der beste Weg war, die Strings in ein Array zu schieben und am Ende zu verbinden. Aber ich habe ein paar Tests gemacht und die meisten Browser optimieren jetzt die String-Verkettung. – Dhana

1

Es gibt keine elegante Möglichkeit, eine nette HTML-Baumstruktur in Javascript mit Strings darzustellen. Sie müssen einfach eine Reihe von Verkettungen verwenden, die immer hässlich sein werden, und ich könnte hinzufügen, dass es furchtbar funktioniert. Das ist, was ich tue:

  1. Schreiben meine Markup in meinem Lieblings-Editor mit dem Leerzeichen alles, was ich
  2. speichert es in der gleichen Position wie Ihre JS-Datei mit dem gleichen Namen + „.txt“, wie die will Erweiterung
  3. Mein Redakteur finden und ersetzen mit RegEx, so dass ich einen Ersatz-alles mit so etwas wie >[\s]*<
  4. Kopieren Sie das einzeilige Ergebnis auf meine Javascript-Datei als String-Variable
  5. Lösen Sie die ersetzen in der .txt-Datei

Dies bedeutet natürlich, dass jedes Mal, wenn Sie das Markup ändern, Sie das Ersetzen erneut durchführen und kopieren müssen. Ich kam aber ziemlich schnell zu dieser Angewohnheit. Darüber hinaus kann jQuery dies schneller verarbeiten, da weniger Zeichen analysiert werden müssen.

+0

Danke, Josh. Ja, das würde sicherlich funktionieren, aber eines der Ziele ist, dies für andere lesbar zu machen. Im Idealfall würden die Zeilenumbrüche und die Einrückung im .js-Block für die zukünftige Wartung durch andere beibehalten. –

4

Wenn Sie jQuery verwenden und Ihre String-Literale HTML-Elemente sein sollen, können Sie diese Elemente auch direkt auf der Seite erstellen und ausblenden und dann auf diese Elemente im DOM verweisen, anstatt sie auszutippen als Zeichenfolgen. Zum Beispiel könnten Sie diese auf Ihrer Seite setzen:

<div id="myContent" style="display: none;"> 
    <div> 
     <div> 
      Hello World 
     </div> 
    </div> 
</div> 

Und dann neu schreiben Sie den Code wie folgt aus:

$("#theObject") 
.doSomething() 
.append(
    $('#myContent').html(); 
); 

Alternativ können Sie die tatsächliche DOM-Element selbst anhängen, wenn Sie verweisen müssen sie die einmal, anstatt seinen Inhalt jedes Mal zu kopieren.

+0

Eigentlich denke ich, das wäre nicht nur auf HTML-Elemente beschränkt ... natürlich könnte man alles in #myContent einfügen. – Rudism

+0

@Rudism: sehr wahr. Das ist manchmal nützlich. –

+0

Ja - wirklich nützlich, um das DOM wie möglich zu verwenden. Die Hauptausnahme kann sein, wenn Sie Bibliothekscode schreiben, der lange Strings verwendet und auf vielen Seiten einer Site aufgerufen wird. Die Bibliothek wird nur einmal geladen (unter der Annahme einer korrekten Caching-Richtlinie), so dass es effizienter ist, lange Strings dort als in den Seiteninhalt selbst zu setzen. –

2

Dies kann viel einfacher gemacht werden!

Verwenden Sie nicht das "+" oder "/".

Verwenden Sie die Graviszeichen: `
enter image description here

$("#theObject").doSomething() 
.append(` 
    <div> 
     <div> 
       Hello World 
     </div> 
    </div> 
`) 
+0

Dies funktioniert nur es2015. – Geuis

Verwandte Themen