U E D R , A S I H C RSS

html5/richtext-edit


1. ๋ฆฌ˜…ŠคŠธ Žธ‘

  • ๋ฆฌ˜ …ŠคŠธ๋ž€ : „œ‹„ ฐ€„ …ŠคŠธ, …ŠคŠธ˜ ฐŠธ, Šคƒ€ผ, ƒ‰ƒ, ๋ฌธ๋‹ • ฌ๋“ฑ˜ ฌ๋ง„  €žฅ•˜ žˆ๋‹

  • HTML5๋Š” ๋ฆฌ˜…ŠคŠธ Žธ‘šฉ API๋ฅผ ‘œค€œผ๋กœ œ ••œ‹ค.
  • ถ”ฐ€๋œ API : contenteditable†„ฑ, ๋ฌธ„œ designMode
  • ๋‚ดšฉ Žธ‘ด ๋ถˆฐ€๋Šฅ•œ š”†Œ(div๋“ฑ)๋ฅผ Žธ‘•˜ฒŒ •˜ธฐ œ„•œ API.

  • contenteditable : Šน • š”†Œ˜ ๋‚ดšฉ๋งŒ Žธ‘ ฐ€๋Šฅ
  • designmode : ๋ฌธ„œ  „ฒด๋ฅผ Žธ‘•  ˆ˜ žˆŒ

2. contenteditable

* contenteditable : ๋ฌธž—ด„ ฐ’œผ๋กœ ฐ€ง, ""(null), "true" "false"
  • "false"™ธ˜ ฐ’„ ฐ€งˆ ๋•Œ •ด๋‹น ๋ฌธ„œ Žธ‘ฐ€๋Šฅ
  • contenteditable˜ ƒƒœ๋Š” ƒ†๋˜๋ฏ€๋กœ Žธ‘ฐ€๋Šฅ•œ š”†Œ •˜œ„˜ š”†Œ๋Š” ๋ชจ๋‘ Žธ‘ฐ€๋Šฅ

- Žธ‘ ฐ€๋Šฅ -
<div id="deit" contenteditable="true"></div>
<div id="deit" contenteditable></div>

- Žธ‘ ๋ถˆฐ€-
<div id="deit" contenteditable="false"></div>

- Žธ‘ ƒƒœ ๋ฐ˜™˜ -
isContentEditable๋กœ ˜„žฌ Žธ‘ฐ€๋Šฅ •Œˆ˜ž‡Œ ("true", "false", "inherit"๋ฐ˜™˜)


- ž๋ฐ”Šคฌ๋ฆฝŠธ๋ฅผ šฉ•œ Žธ‘ †„ ••˜ธฐ -
var editor = document.getElementById("editor");
if(editor.isContentEditable)
editor.contentEditable = "false";

3. designMode

designMode : documentฒดฐ€ ฐ€„ †„˜ •˜๋‚˜, 'on' 'off'๋ชจ๋“œ ฐ€ง
window.document : ˜„žฌ ›นŽ˜ง€  „ฒด Žธ‘ฐ€๋Šฅ
iFrame˜ contentDocument๋ฅผ ๋Œ€ƒ - iFrame•ˆ˜ ๋‚ดšฉ Žธ‘ฐ€๋Šฅ


src = "about:blank"
width = "300" height = "200"
onload="this.contentDocument.designMode='on'">
</iframe>

4. Žธ‘ฐ€๋Šฅ˜—ญ—„œ Žธ‘•  ๋‚ดšฉ ฐ€ ˜ธฐ

innerHTML : HTMLƒœธ๋ฅผ ฌ••œ ๋ฌธž—ด
textContent : HTMLƒœ œ™ธ ˆœˆ˜ ๋ฌธž—ด๋งŒ

- innerHTML -
<div id="editor" contenteditabl></div>
var editor = document.getElementById("editor");
// innerHTML †„„ –ด๋“คž„
alert(editor.innerHTML);

- textConetent -

id="editor"
src="about:blank"
width="300" height="200"
onload="this.contentDocument.designMode = 'on'>
</iframe>
var editor= document.getElementById("editor");
// textContent †„„ –ด๋“คž„
alert(editor.contentDocument.body.textContent);


5. „ ƒ•œ ๋ฒ”œ„ กฐž‘

  • window๋‚˜ documentฒดฐ€ ฐ€„ getSelection()๋ฉ”„œ๋“œ๋ฅผ šฉ•˜—ฌ Selection˜• ฒด ƒ„
- selection ฒด ƒ„ฑ -
var selection = window.getSelection();

  • „ ƒ ๋ฒ”œ„˜ DOMš”†Œ™€ ด€๋ จ๋œ API
    • anchorNode : „ ƒ„ ‹œž‘•œ œ„˜— žˆ๋Š” š”†Œ˜ DOM๋…ธ๋“œ ฐ€ ˜
    • anchorOffset : anchorNode •ˆ—„œ „ ƒ„ ‹œž‘•œ œ„˜˜ ˜”„…‹ ๋ฐ˜™˜
    • focusNode : „ ƒ„ ข…๋ฃŒ•œ œ„˜— žˆ๋Š” š”†Œ˜ DOM๋…ธ๋“œ ฐ€ ˜
    • focusOffset : focusNode •ˆ—„œ „ ƒ„ ข…๋ฃŒ•œ œ„˜˜ ˜”„…‹ ฐ€ ˜

  • ปค„œ œ„˜ กฐž‘
    • collapse(parentNode, offset) : ง€ ••œ š”†Œ(parrentNode)•ˆ˜ ง€ ••œ œ„˜(offset)œผ๋กœ ปค„œ๋ฅผ ด๋™‹œ‚จ๋‹
    • collapseToStart() : ˜„žฌ …ŠคŠธ˜ ๋งจ •žœผ๋กœ ปค„œ๋ฅผ ด๋™‹œ‚ด
    • collapseToEnd() : „ ƒ๋œ …ŠคŠธ˜ ๋งจ ๋’ค๋กœ ปค„œ๋ฅผ ด๋™‹œ‚ด
    • isCollapsed() : …ŠคŠธฐ€ „ ƒ๋˜ง€ •Š•˜๋Š”๋ฐ ปค„œฐ€ žˆ„•Œ true๋ฐ˜™˜

  • Selection ฒด— toString‚ฌšฉ•˜๋ฉด „ ƒ•œ ๋ฒ”œ„˜ ๋ฌธž—ด(HTML œ™ธ)ฐ€ ˜
- „ ƒ๋œ ๋ฌธž—ด œ ฅ -
alert(window.getSelection().toString());

6. ›น –ด”Œ๋ฆฌผ€…˜˜ ‹–‰†Œธฐ๋Šฅ

  • กฐž‘•œ ๋‚ดšฉ ด๋ ธฐ๋ก undoManagerฐ€  €žฅ(œƒœ„ ฒด) ƒ๋‹žˆ „‹
  • DOM๋ณ€ฒฝ€ ๋ธŒ๋šฐ €ฐ€ ‹–‰ ด๋ ด€๋ฆฌ „Žธ ‹Œ

- undoManager— ด๋ ถ”ฐ€•˜๋Š” ๋ถ€๋ถ„ -
undoManager.add({
operation: "add-favorite",
id : 100
}, "ฆฒจฐพธฐ");

- ‹–‰ †Œ -
window.addEventListener("undo", function(event) {
var data = event.data;
if(data.operation == "add-favorite") {
var id = data.id;
// ฆฒจฐพธฐ๋กœ๋ถ€„˜ ‚ญ œ ˜๋ฆฌ
...
}
...
}, false);

7. ด€๋ ‚ฌŠธ

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:41
Processing time 0.0236 sec