Як показати тег <div> буквально в тегу <code> / <pre>?


79

Я використовую <code>тег всередині <pre>тегу, щоб показати код у своєму блозі блоґерів. На жаль, це не працює з тегами HTML. Чи є спосіб показати " <div>" всередині <pre>або <code>тег, фактично не інтерпретуючи це як HTML? Це те, що я роблю зараз:

<pre>
 <code>
 .class {        
   color:red;
 }
 // I would like HTML code inside this
 </code>
</pre>

Що працює нормально для всього, крім HTML. Будь-яка ідея, як цього досягти? Дякую.


1
можливий дублікат How to escape <і> inside <pre> tags
Jukka K. Korpela

1
Те, що ви дійсно хочете, - це <![CDATA[]]>розділ; удачі, чекаючи, поки автори браузера наздоженуть 1988 рік між додаванням kewl footchers.
Тобі Спейт

Відповіді:


100

На жаль, це не працює з тегами HTML.

<code>означає "Це код", <pre>означає "Пробіл у цій розмітці є значним". Ні те, ні інше не означає "Зміст цього елемента не слід розглядати як HTML", тому обидва працюють ідеально, навіть якщо вони означають не те, що ви хочете, щоб вони означали.

Чи є спосіб показати " <div>" всередині <pre>або <code>тег, фактично не інтерпретуючи це як HTML?

Якщо ви хочете відтворити <символ, використовуйте &lt;, &gt;для для >та &amp;для &.

Ви не можете (у сучасному HTML) писати розмітку, і її слід інтерпретувати як текст.


7
Дякую. Зараз я використовую цей інструмент, щоб уникнути символів HTML: htmlescape.net/htmlescape_tool.html
Loolooii

2
@XedinUnknown - І тут сказано, що ви не повинні посилатися на цей документ. Якщо ви праві, то кожен браузер на планеті не відповідає стандартам. Ви не праві. Специфікація описує модель вмісту попереднього елемента, і він може містити елементи. Порівняйте з текстовою областю, яка може містити лише текст.
Квентін

52

Здається, текстова область, що читається, робить майже те, що ви хочете.

<textarea readonly> <!-- html code --> </textarea>

10
Я хотів би пояснити, чому це було проголосовано проти. Тег textarea дозволяє буквальний HTML-код. Я випадково використовую його для відображення буквального HTML, коли натрапив на це запитання, і відповіді здаються досить складними в порівнянні з просто використанням текстової області.
Джейсон Уілкінс,

Я не голосував проти, але на випадок, якщо когось це турбує, схоже, посилання на символи все ще аналізуються всередині <textarea> … </textarea>, наприклад, &gt;перетворюються на >. Це означає, що це вже не "сирий" вміст.
ShreevatsaR

25

Ви можете використовувати елемент "xmp". Цей <xmp></xmp>код був у HTML з самого початку і підтримується всіма браузерами. Навіть його не слід використовувати, він широко підтримується.

Все, що <xmp></xmp>знаходиться всередині , сприймається як є (там не розпізнаються теги розмітки lke або посилання на символи), за винятком очевидної причини, кінцевого тегу самого елемента.

В іншому випадку "xmp" відображається як "pre".


2
Цей тег застарілий.
Усман Ахмед

@UsmanAhmed Як би там не було - їх xmpвикористовують такі приємні речі, як вбудовуванняmarkdown
StephenBoesch

1
xmpможе бути застарілою, але це як і раніше специфікація HTML, яка підтримує її донині (саме тому це роблять усі основні браузери). Я гадаю, він ніколи не стає повністю застарілим, оскільки це єдиний тег у своєму роді і сьогодні використовується більш широко, ніж коли він вважався застарілим.
Nate I,

Через два роки все ще працюю в Chrome, дякую за відповідь, яка вирішила мою проблему.
Dave S

16

Спробуйте:

<xmp></xmp>

для прикладу:

<pre>
     <xmp><!-- your html code --></xmp>
</pre>

до побачення


Працює добре, але згідно з документацією, він застарів ... Шкода, бо це чудово :-D
ssougnez

2
Роланд дав ту саму відповідь роком раніше і з більш детальною інформацією, тому це дублікат.
Dave S


2

Цього можна легко досягти за допомогою трохи JavaScript.

document.querySelectorAll("code").forEach(el => el.innerText = el.innerHTML);

Запустіть фрагмент нижче, щоб побачити його в дії:

document.querySelectorAll("code").forEach(el => el.innerText = el.innerHTML);
pre {
  padding: 1rem;
  background-color: #eee;
  border-radius: 0.25rem;
}
<pre>
  <code>
   .class {        
     color:red;
   }
   
   // I would like HTML code inside this
   <h1>Hello this is a heading</h1>
  </code>
</pre>


0

Спробуйте CodeMirror ( https://codemirror.net/ )

Це полегшена бібліотека, яка стилізує код в HTML. Ось скріншот того, на що я маю на увазі:

введіть тут опис зображення

Добре працювали для нас!


0

Можливо, не найкраща відповідь, але ви можете зробити щось подібне:

<p><<input type="hidden">h1<input type="hidden">><input type="hidden">This code is 
displayed!<input type="hidden"><<input type="hidden">/h1<input type="hidden">></p>

<p><<input type="hidden">h1<input type="hidden">><input type="hidden">This code is displayed!<input type="hidden"><<input type="hidden">/h1<input type="hidden">></p>



-4

Так, із функцією екранування xml. Вам потрібно буде ввімкнути jQuery, щоб він працював.

<pre>
  ${fn:escapeXml('
    <!-- all your code -->
  ')};
</pre>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.