2011-01-16 39 views
97

tôi cần để có thể làm cho một số thẻ HTML bên trong một textarea (cụ thể là < mạnh >, <i>, <u>, < một >) nhưng textareas chỉ giải thích nội dung của họ dưới dạng văn bản. Có một cách dễ dàng để làm điều đó mà không dựa vào thư viện bên ngoài/plugins (Tôi đang sử dụng jQuery)? Nếu không, bạn có biết về bất kỳ plugin jQuery nào tôi có thể sử dụng để thực hiện việc này không?Rendering HTML bên trong textarea

+0

Cách duy nhất để làm sẽ che phủ đánh dấu HTML của bạn qua nội dung của thẻ textarea thông qua các thủ thuật định vị CSS. Không có gì sẽ giúp bạn thuyết phục trình duyệt hiển thị nội dung văn bản khác nhau. (Tại sao chính xác bạn "cần" để làm điều này?) – Pointy

+0

Tôi chỉ cần người dùng có thể thêm một số kiểu định dạng cho văn bản mà anh ấy nhập (giống như khi bạn viết một bài viết trên Wordpress).Tôi chỉ không cần tất cả các tính năng như căn chỉnh văn bản và vân vân, mà chỉ là những thẻ cơ bản. –

Trả lời

174

Điều này không thể thực hiện với một số textarea. Những gì bạn đang tìm kiếm là một content editable div, mà là rất dễ dàng thực hiện:

<div contenteditable="true"></div> 

jsFiddle

div.editable { 
 
    width: 300px; 
 
    height: 200px; 
 
    border: 1px solid #ccc; 
 
    padding: 5px; 
 
} 
 

 
strong { 
 
    font-weight: bold; 
 
}
<div contenteditable="true">This is the first line.<br> 
 
See, how the text fits here, also if<br>there is a <strong>linebreak</strong> at the end? 
 
<br>It works nicely. 
 
<br> 
 
<br><span style="color: lightgreen">Great</span>. 
 
</div>

+0

@Tim, đúng vậy! Đôi khi bạn đang mắc kẹt suy nghĩ jQuery và cuối cùng làm cho nó phức tạp hơn sau đó nó phải được. Tôi đã cập nhật câu trả lời của mình. Cảm ơn bạn đã khai sáng cho tôi :) – mekwall

+6

một sự xấu hổ thực sự rằng bạn không thể sử dụng thực tế điều này mà không cần sử dụng javascript để gửi các thay đổi của bạn bằng cách sử dụng ajax hoặc sao chép chúng vào một hình thức đầu vào. Nếu bất cứ ai đã tìm thấy một cách để làm điều đó tôi muốn được thực sự quan tâm! – Ben

+0

@TimDown và ngắn hơn: '

';) – yckart

19

Với một div có thể chỉnh sửa, bạn có thể sử dụng phương pháp document.execCommand (more details) để dễ dàng cung cấp hỗ trợ cho các thẻ bạn chỉ định và cho một số chức năng khác ..

#text { 
 
    width : 500px; 
 
\t min-height : 100px; 
 
\t border : 2px solid; 
 
}
<div id="text" contenteditable="true"></div> 
 
<button onclick="document.execCommand('bold');">toggle bold</button> 
 
<button onclick="document.execCommand('italic');">toggle italic</button> 
 
<button onclick="document.execCommand('underline');">toggle underline</button>

+0

Điều này không hoạt động trong một số trình duyệt chỉ cần thêm số này làm lưu ý AS là '16 –

0

Tôi có cùng một vấn đề nhưng ngược lại, và các giải pháp sau đây. Tôi muốn đặt html từ một div trong một textarea (vì vậy tôi có thể chỉnh sửa một số phản ứng trên trang web của tôi, tôi muốn có textarea trong cùng một vị trí.)

<div id="msg500">here some <strong>html</strong> <i>tags</i>.</div> 

Để đưa nội dung của div này trong textarea Tôi sử dụng:

var content = $('#msg500').text(); 
$('#msg500').wrapInner('<textarea>'+content+'</textarea>'); 
0

Phụ lục này. Bạn có thể sử dụng các thực thể ký tự (chẳng hạn như thay đổi <div> thành &lt;div&gt;) và nó sẽ hiển thị trong vùng văn bản. Nhưng khi được lưu, giá trị của vùng văn bản là văn bản như được hiển thị. Vì vậy, bạn không cần phải de-mã hóa. Tôi vừa thử nghiệm điều này trên các trình duyệt (tức là quay lại 11).

+0

I thực sự thích điều này để làm việc cho tôi nhưng nó không. Ví dụ ' 'không hiển thị dưới dạng HTML. Tôi đang sử dụng Chrome 46. – sirdank

+0

Hm. Tôi sao chép-dán chuỗi đó trực tiếp vào một tài liệu html và nó làm cho đánh dấu đúng cho tôi trong Chrome Phiên bản 48.0.2552.0 dev (64-bit) OS X 10.11.1. Vì vậy, có lẽ đó là một vấn đề phiên bản. – axlotl

+0

Không hoạt động cho tôi. –

1

thử ví dụ này trên JSFiddle

<style> 
.editable { 
    width: 300px; 
    height: 200px; 
    border: 1px solid #ccc; 
    padding: 5px; 
    resize: both; 
    overflow: auto; 
} 
</style> 

<div class="editable" contenteditable="true"></div> 
<button class="bold">toggle red</button> 
<button class="italic">toggle italic</button> 

<script> 
function toggleRed() { 
    var text = $('.editable').text(); 
    $('.editable').html('<p style="color:red">'+text+'</p>'); 
} 

function toggleItalic() { 
    var text = $('.editable').text(); 
    $('.editable').html("<i>"+text+"</i>"); 
} 

$('.bold').click(function() { 
    toggleRed(); 
}); 

$('.italic').click(function() { 
    toggleItalic(); 
}); 
</script> 

Sửa bởi Jeffrey Crowder - Web Developer/Windows lập trình viên

Tôi đã thêm một fiddle JS của mã này.

-2

này có thể với <textarea> điều duy nhất bạn cần làm là sử dụng Summernote WYSIWYG editor

nó diễn giải các thẻ HTML bên trong một textarea (cụ thể là <strong>, <i>, <u>, <a>)

+0

Nó không sử dụng textarea. Nó sử dụng div, mà không thể được gửi với một biểu mẫu. –

+0

Nó hoạt động với văn bản, chỉ cần thử đưa id vào văn bản thay vì div. Tôi đã tạo ra toàn bộ dự án bằng cách sử dụng textarea và summernote. Nó hoạt động tốt! –

+0

Whats điểm? Nó hoạt động giống như ckeditor nếu textarea được sử dụng. Không thể hiển thị thẻ HTML như được yêu cầu. –