Làm cách nào để hiển thị thẻ <div> theo đúng nghĩa đen trong thẻ <code> / <pre>?


79

Tôi đang sử dụng <code>thẻ bên trong <pre>thẻ để hiển thị mã trên blog blogger của mình. Thật không may, nó không hoạt động với các thẻ HTML. Có cách nào để hiển thị " <div>" bên trong của <pre>hoặc <code>thẻ mà không thực sự hiểu nó là HTML không? Đây là những gì tôi làm ngay bây giờ:

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

Cái nào hoạt động tốt cho mọi thứ ngoại trừ HTML. Bất kỳ ý tưởng làm thế nào để đạt được điều này? Cảm ơn.



1
Những gì bạn thực sự muốn là một <![CDATA[]]>phần; chúc may mắn đang chờ các tác giả trình duyệt bắt kịp với năm 1988 giữa việc thêm các footcher kewl.
Toby Speight

Câu trả lời:


100

Thật không may, nó không hoạt động với các thẻ HTML.

<code>có nghĩa là "Đây là mã", <pre>có nghĩa là "Khoảng trắng trong đánh dấu này là đáng kể". Không có nghĩa là "Nội dung của phần tử này không nên được coi là HTML", vì vậy cả hai đều hoạt động hoàn hảo, ngay cả khi chúng không có nghĩa là những gì bạn muốn.

Có cách nào để hiển thị " <div>" bên trong của <pre>hoặc <code>thẻ mà không thực sự hiểu nó là HTML không?

Nếu bạn muốn hiển thị một <ký tự thì hãy sử dụng &lt;, với &gt;for >&amp;for &.

Bạn không thể (trong HTML hiện đại) viết đánh dấu và để nó được hiểu là văn bản.


7
Cảm ơn. Tôi đang sử dụng công cụ này ngay bây giờ để thoát khỏi nhân vật HTML: htmlescape.net/htmlescape_tool.html
Loolooii

2
@XedinUnknown - Và ở đây nó nói rằng bạn không nên tham khảo tài liệu đó. Nếu bạn đúng thì mọi trình duyệt trên hành tinh đều không tuân thủ tiêu chuẩn. Bạn không đúng. Đặc tả mô tả mô hình nội dung của một phần tử trước và nó có thể chứa các phần tử. So sánh với textarea chỉ có thể chứa văn bản.
Quentin

52

Có vẻ như một văn bản chỉ đọc làm được khá nhiều điều bạn muốn.

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

10
Tôi muốn làm rõ lý do tại sao điều này lại bị bỏ phiếu. Thẻ textarea cho phép mã HTML theo nghĩa đen. Tôi chỉ tình cờ sử dụng nó để hiển thị HTML theo nghĩa đen khi tôi bắt gặp câu hỏi này và câu trả lời có vẻ khá phức tạp so với việc chỉ sử dụng một textarea.
Jason Wilkins

Tôi không phản đối, nhưng trong trường hợp có ai quan tâm, có vẻ như các tham chiếu ký tự vẫn được phân tích cú pháp bên trong <textarea> … </textarea>, ví dụ như &gt;biến thành >. Điều này có nghĩa là nó không phải là nội dung "thô" nữa.
ShreevatsaR

25

Bạn có thể sử dụng phần tử "xmp". Các<xmp></xmp> đã được trong HTML ngay từ đầu và được hỗ trợ bởi tất cả các trình duyệt. Thậm chí nó không nên được sử dụng, nó được hỗ trợ rộng rãi.

Mọi thứ bên trong <xmp></xmp>đều được giữ nguyên như vậy (không có thẻ lke đánh dấu hoặc tham chiếu ký tự nào được nhận dạng ở đó) ngoại trừ, vì lý do rõ ràng, thẻ kết thúc của chính phần tử đó.

Nếu không, "xmp" được hiển thị giống như "pre".


2
Thẻ này đã lỗi thời.
Usman Ahmed

@UsmanAhmed trở mà vì nó có thể - những xmpđược sử dụng bởi những thứ tốt đẹp như nhúngmarkdown
StephenBoesch

1
xmpcó thể không được dùng nữa, nhưng nó vẫn là thông số kỹ thuật HTML để hỗ trợ nó cho đến ngày nay (đó là lý do tại sao tất cả các trình duyệt chính đều làm như vậy). Tôi tưởng tượng nó sẽ không bao giờ bị phản đối hoàn toàn, vì đây là thẻ duy nhất thuộc loại này và ngày nay được sử dụng rộng rãi hơn so với khi nó được cho là không còn được dùng nữa.
Nate I

Vẫn hoạt động trong Chrome hai năm sau, cảm ơn vì câu trả lời đã giải quyết được vấn đề của tôi.
Dave S

16

Thử:

<xmp></xmp>

ví dụ như:

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

tạm biệt


Hoạt động tốt nhưng theo tài liệu hướng dẫn, nó bị phản đối ... Quá xấu bởi vì nó là tuyệt vời :-D
ssougnez

2
Roland đã đưa ra câu trả lời tương tự một năm trước đó và chi tiết hơn nên đây là một bản sao.
Dave S


2

Điều này có thể dễ dàng đạt được với một chút javascript.

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

Chạy đoạn mã dưới đây để xem nó hoạt động:

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

Hãy thử CodeMirror ( https://codemirror.net/ )

Đó là một thư viện nhẹ tạo kiểu mã trong HTML. Đây là ảnh chụp màn hình của những gì tôi đang đề cập đến:

nhập mô tả hình ảnh ở đây

Làm việc tốt cho chúng tôi!


0

Có thể không phải là câu trả lời hay nhất, nhưng bạn có thể làm như sau:

<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

Có, với một hàm thoát xml. Tuy nhiên, bạn sẽ cần phải bật jQuery để nó hoạt động.

<pre>
  ${fn:escapeXml('
    <!-- all your code -->
  ')};
</pre>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.