Отображение javascript в виде фрагмента кода
то, что я пытаюсь сделать, это отобразить фрагмент javascript на странице и не запускать его, просто отображать как фрагмент кода для копирования людьми. Я загружаю Google Prettify, затем на странице у меня есть этот код:
<pre class="prettyprint">
<script>
$(document).ready(function(){
setTimeout(function(){
console.log('deleting cookie');
$.cookie('cookie',null,{domain: document.domain});
},1000);
});
</script>
</pre>
но этот код просто выполняется и не отображает фрагмент JS. Я что-то упускаю?
5 ответов
вам нужно преобразовать ваш <
и >
символы для HTML-объектов, таких как:
<pre class="prettyprint">
<script>
$(document).ready(function(){
setTimeout(function(){
console.log('deleting cookie');
$.cookie('cookie',null,{domain: document.domain});
},1000);
});
</script>
</pre>
Я бы также рекомендовал обернуть код в <code>
теги в дополнение к существующей <pre>
теги.
проблема заключается в том, что вы вводите HTML, и вы хотите, чтобы он не рассматривался как HTML. В частности, открытие <script>
элемент.
чтобы ввести HTML, который не будет анализироваться как HTML, вам нужно кодировать символы, которые являются специальными для HTML. Например,<
кодируется как <
, >
кодируется как >
и &
кодируется как &
.
Итак, чтобы вывести следующее без его разбора как HTML-код:
<script>...</script>
...вам нужно ввести:
<script>...</script>
Он работает из-за <script>
теги. Вы должны закодировать их:
<pre class="prettyprint">
<script>
$(document).ready(function(){
setTimeout(function(){
console.log('deleting cookie');
$.cookie('cookie',null,{domain: document.domain});
},1000);
});
</script>
</pre>
пусть textContent
свойства (или createTextNode
) сделайте весь тяжелый подъем кодирования любого текста, который вам нужно вставить в dom:
var sampleCode="<script> $(document).ready(function(){ setTimeout(function(){ console.log('deleting cookie'); $.cookie('cookie',null,{domain: document.domain}); },1000); }); </script>";
var pre=document.createElement("pre");
pre.textContent=sampleCode;
pre.className="prettyprint";
document.body.appendChild(pre);