Как сделать div с мигающим курсором и редактируемым текстом без использования ‹input›?

Мне нужно сделать слой div, чтобы при нажатии на него курсор мигал, и вы могли вставлять/удалять текст так же, как это делает <input type="text">, за исключением того, что я не хочу его использовать, так как он слишком ограничен для моего кейс.

Я определенно могу использовать JavaScript.


person Tower    schedule 19.05.2009    source источник


Ответы (6)


Элемент DIV имеет (и другие элементы) свойство contentEditable, для которого в Javascript можно установить значение true.

getElementById('YourDiv').contentEditable = true;
person Robert Koritnik    schedule 19.05.2009
comment
Можно сделать и в разметке: ‹div contentEditable=true›Редактируемый контент‹/div› - person Fredrik Mörk; 19.05.2009
comment
Хорошо, я думал, что это возможно только в документе, извините! - person Fabien Ménager; 19.05.2009
comment
Обратите внимание, что contentEditable не входит в спецификацию HTML4.01 или в спецификацию HTML DOM2 (1.0). Это что-то добавленное браузерами. - person Colin Fine; 19.05.2009
comment
Однако он появляется в черновике HTML5: w3.org/TR/html5/editing.html#contenteditable - person Quentin; 19.05.2009
comment
Это круто, но мне просто нужно работающее решение JavaScript/CSS, которое позволит мне добавлять текст в InnerHTML DIV. - person Tower; 19.05.2009

Вы можете сделать div доступным для редактирования, установив для его атрибута/свойства contentEditable значение true. Однако для всего, что немного более мощное или гибкое, чем очень простое редактирование, вы можете взглянуть на существующие решения, такие как:

person Daan    schedule 19.05.2009

JQuery можно использовать следующим образом:

$.('#yourDiv').click(function() {
    $(this).attr('contenteditable', 'true');
});
person nonshatter    schedule 05.12.2012

Я предлагаю вам использовать текстовое поле, и если этого недостаточно, используйте редактор WYSIWYG, такой как tinyMCE или FCKeditor.

person Fabien Ménager    schedule 19.05.2009

насколько я понимаю вашу проблему, вы можете решить ее, добавив textarea в свой div. Очень просто сделать так, чтобы этот textarea авторазмер занимал всю div область и выглядел вот так div.

Что касается contentEditable, я видел некоторые браузеры, поддерживающие эту функцию для div-элемента и не поддерживающие. В любом случае, вы можете использовать iframe в своем div. Это document элемент может иметь contentEditable.

person Sergei Kovalenko    schedule 20.05.2009

Для этой цели можно использовать атрибут contenteditable. Следующая строка кода была протестирована в IE7 и Firefox 3.0.10. Во-первых, я заметил, что этот атрибут следует использовать только в нижнем регистре; иначе он не будет работать в Firefox.

<div id="Div_ID" contenteditable="true" tabindex="0">
   Enter text here
</div>
person Sourabh    schedule 20.05.2009