Ответ 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>