I want to display a chunk of code generated dynamically inside a code example block that users can highlight a copy.
The content will change based on user input so it cannot be hardcoded.
This is an example of the content I would like to display inside the block:
<script type="application/ld+json">{
"name": "PBOV1 Is a Human De Novo Gene with Tumor-Specific Expression That Is Associated with a Positive Clinical Outcome of Cancer",
"keywords": "pbov1, tumor-specific, cancer, Cancer, Evolutionary Biology, Immunology",
"version": "1",
"url": "https://figshare.com/articles/PBOV1_Is_a_Human_De_Novo_Gene_with_Tumor_Specific_Expression_That_Is_Associated_with_a_Positive_Clinical_Outcome_of_Cancer__/156778",
"license": ""
}</script>
I’m using VueJS and this is the method in progress:
makeScript(){
var str = JSON.stringify(this.metadata, null, 2);
var script=document.createElement('script');
script.type='application/ld+json';
script.text = str;
this.result = script;
document.getElementById("resultCode").appendChild(script);
},
I’ve tried “code” and “pre” and all it shows is nothing but the script is there. I think the script is getting compiled and not shown as text, I could be wrong…. I hope that makes sense.
output goes here:
<div class="form-group">
<pre >
<code id="resultCode">
</code>
</pre>
</div>
Advertisement
Answer
- Construct the script element.
- Put it in a new, temporary element.
- Put the
innerHTMLof the temp element into a text node. - Put that text node into the output element.
function makeScript() {
metadata = {
"name": "PBOV1 Is a Human De Novo Gene with Tumor-Specific Expression That Is Associated with a Positive Clinical Outcome of Cancer",
"keywords": "pbov1, tumor-specific, cancer, Cancer, Evolutionary Biology, Immunology",
"version": "1",
"url": "https://figshare.com/articles/PBOV1_Is_a_Human_De_Novo_Gene_with_Tumor_Specific_Expression_That_Is_Associated_with_a_Positive_Clinical_Outcome_of_Cancer__/156778",
"license": ""
}
var str = JSON.stringify(metadata, null, 2);
var script = document.createElement('script');
script.type = 'application/ld+json';
script.text = str;
p = document.createElement('div');
p.appendChild(script);
text = document.createTextNode(p.innerHTML);
document.getElementById("resultCode").appendChild(text);
}
makeScript();<div class="form-group"> <pre><code id="resultCode"></code></pre> </div>