Я пытаюсь создать страницу с некоторыми изменяемыми полями, но я хочу, чтобы они отображались в виде полей ввода, когда пользователь нажимает на них (остальное время отображается как обычный текст). Есть ли простой способ сделать это в Javascript?
Используя javascript для изменения текста в поле ввода при нажатии
Ответ 1
Введение
Довольно просто, да. Я могу думать о двух основных подходах:
-  Использование атрибута contenteditable
-  Используя input, вы добавляете "на лету"
Полезные ссылки для обоих ниже:
 Использование атрибута contenteditable
Атрибут contenteditable (W3C, MDC, MSDN) может быть "истинным", указывая, что элемент можно редактировать напрямую. Это имеет то преимущество, что не требует никакого JavaScript вообще (живой пример):
<p id="container">The <span contenteditable="true">colored items</span> in this paragraph
are <span contenteditable="true">editable</span>.</p>
Чтобы вы не подумали, что это что-то новое, IE поддерживает его с IE 5.5 и другими крупными браузерами почти так долго. (Фактически, это было одним из многих нововведений Microsoft с временными рамками IE5.5/IE6, они также дали нам innerHTML и Ajax.)
Если вы хотите захватить (отредактированный) контент, вы просто захватываете innerHTML из элементов, которые вы сделали редактируемыми. Вот пример некоторого JavaScript, который будет отмечен, когда contenteditable охватывает blur (живая копия):
var spans = document.getElementsByTagName("span"),
    index,
    span;
for (index = 0; index < spans.length; ++index) {
    span = spans[index];
    if (span.contentEditable) {
        span.onblur = function() {
            var text = this.innerHTML;
            text = text.replace(/&/g, "&").replace(/</g, "<");
            console.log("Content committed, span " +
                    (this.id || "anonymous") +
                    ": '" +
                    text + "'");
        };
    }
}#container span {
    background-color: #ff6;
}<p id="container">The <span id="span1" contenteditable="true">colored items</span> in this paragraph 
    are <span contenteditable="true">editable</span>.</p>Ответ 2
Тривиальный пример с использованием обычного JavaScript будет выглядеть следующим образом: http://jsfiddle.net/vzxW4/.
document.getElementById('test').onclick = function() {
    document.body.removeChild(this);
    var input = document.createElement('input');
    input.id = 'test';
    input.value = this.innerHTML;
    document.body.appendChild(input);
    input.select();
}
Использование библиотеки сэкономит вам время и головные боли. Например, используя jQuery: http://jsfiddle.net/vzxW4/1/.
$("#test").click(function() {
    var input = $("<input>", { val: $(this).text(),
                               type: "text" });
    $(this).replaceWith(input);
    input.select();
});
Ответ 3
Можем ли мы сделать это простые парни?
Просто сохраните текстовое поле со свойством readonly true и некоторый CSS, который делает текстовое поле похожим на span с границей.
Затем, как только пользователь нажимает на текстовое поле, удаляйте атрибут readonly.
На размытие восстанавливаются атрибуты CSS и readonly.
