Wie rendert man HTML in String mit Javascript?

Lesezeit: 3 Minuten

Ich habe folgenden Javascript-Code:

var html="<div class="col-lg-4 col-references" idreference=""+response+'"><span class="optionsRefer"><i class="glyphicon glyphicon-remove delRefer" style="color:red; cursor:pointer;" data-toggle="modal" data-target="#modalDel"></i><i class="glyphicon glyphicon-pencil editRefer" data-toggle="modal" data-target="#modalRefer" style="cursor:pointer;"></i></span><div id="contentRefer'+response+'">'+refer_summary+'</div><span id="nameRefer'+response+'">'+refer_name+'</span></div>';
$("#references").append(html);

Wenn dieser Code ausgeführt wird, wird die refer_summary Variable enthält tatsächlich eine Zeichenfolge, die HTML-Tags wie enthalten kann <b>, <i> usw., jedoch werden diese Tags auf der Seite angezeigt, anstatt ihr Verhalten wiederzugeben.

Zum Beispiel auf der Seite, die es zeigen würde <b> vielmehr den Inhalt fett zu machen.

Wie kann ich die HTML-Tags rendern, wenn der Wert angehängt wird?

In meiner Django-Vorlage verwende ich {% autoescape off %}{{content}}{% endautoescape %} Wenn ich also die Seite zum ersten Mal lade, wird der Inhalt korrekt mit Fettdruck usw. gerendert. Aber wie kann ich dasselbe tun, wenn ich den HTML-Code von Javascript anfüge?

Danke für die Hilfe!

  • Klingt nach einem XSS-Angriff, der darauf wartet, passiert zu werden.

    – Robby Cornelissen

    25. Januar 2017 um 4:59 Uhr

Benutzeravatar von Shubham Sureka
Shubham Sureka

Sie können HTML mit rendern document.write()

document.write('<html><body><h2>HTML</h2></body></html>');

Um jedoch einen vorhandenen HTML-String anzuhängen, müssen Sie die ID des Knotens/Tags abrufen, unter dem Sie Ihren HTML-String einfügen möchten.

Es gibt zwei Möglichkeiten, wie Sie dies möglicherweise erreichen können:

  1. Verwenden von DOM –
var tag_id = document.getElementById('tagid');
var newNode = document.createElement('p');
newNode.appendChild(document.createTextNode('html string'));
  1. Verwenden von innerHTML –
var tag_id = document.getElementById('tagid');
tag_id.innerHTML = 'HTML string';

  • Der Vorteil von 2 ist, dass kein neues Element/Dom wie bei write und 1 entsteht. Scheint eine reine Lösung zu sein.

    –Timo

    31. März 2021 um 18:19 Uhr

  • Es sollte zur Verdeutlichung hinzugefügt werden, dass in 1 und 2 jedes HTML-Markup enthalten ist, das in der 'html string' wird es tatsächlich sein geparst und in DOM konvertiert Knoten. Also das ist eine Möglichkeit zum Erweitern des DOM, nicht nur zum Einfügen von Textzeichenfolgen.

    – Marcin Wojnarski

    11. August 2021 um 22:57 Uhr

Verwenden Sie $.parseHTML vor dem Anhängen von HTML wie as

var html="<div class="col-lg-4 col-references" idreference=""+response+'"><span class="optionsRefer"><i class="glyphicon glyphicon-remove delRefer" style="color:red; cursor:pointer;" data-toggle="modal" data-target="#modalDel"></i><i class="glyphicon glyphicon-pencil editRefer" data-toggle="modal" data-target="#modalRefer" style="cursor:pointer;"></i></span><div id="contentRefer'+response+'">'+refer_summary+'</div><span id="nameRefer'+response+'">'+refer_name+'</span></div>';
html = $.parseHTML( html);
$("#references").append(html);

  • Die anderen Ansätze haben bei mir in Outsystems nicht funktioniert, aber dieser war perfekt. Danke.

    – Sousa

    21. Februar 2020 um 14:51 Uhr

Sie können Javascript verwenden document.createRange().createContextualFragment:

const frag = document.createRange().createContextualFragment('<div>One</div><div>Two</div>');
console.log(frag);

/*
  #document-fragment
    <div>One</div>
    <div>Two</div>
*/

https://davidwalsh.name/convert-html-stings-dom-nodes

Wenn Sie dies in ReactJS tun möchten, können Sie das Attribut “dangerouslySetInnerHTML” anstelle des Attributs “innerHTML” verwenden.

Da es den Angreifern ermöglicht, Codes (XSS) einzuschleusen, wird es als gefährlich bezeichnet!

const myHtmlData = `
    <ul>
        <li>Item1<li>
        <li>Item2<li>
    </ul>`;
...
<div
    dangerouslySetInnerHTML={{
        __html: myHtmlData
}}>

Sie müssen einem bestimmten Div eine ID zuweisen und dann die Benutzeroberfläche in dem spezifischen Div entsprechend bearbeiten/ändern.

Gegeben Hier ist eine hervorragende Erklärung.

1437040cookie-checkWie rendert man HTML in String mit Javascript?

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

Privacy policy