Поиск…
Синтаксис
- bool supported = document.execCommand (commandName, showDefaultUI, valueArgument)
параметры
commandId | значение |
---|---|
⋮ Встроенные команды форматирования | |
BACKCOLOR | Значение цвета String |
смелый | |
createLink | URL-строка |
Fontname | Имя семейства шрифтов |
размер шрифта | «1», «2», «3», «4», «5», «6», «7», |
ForeColor | Значение цвета String |
зачеркивания | |
верхний индекс | |
разъединить | |
⋮ Команды форматирования блоков | |
удалять | |
formatBlock | «ht», «h», «h», «h», «p», «pre», |
forwardDelete | |
insertHorizontalRule | |
insertHTML | HTML-строка |
insertImage | URL-строка |
insertLineBreak | |
insertOrderedList | |
insertParagraph | |
InsertText | Текстовая строка |
insertUnorderedList | |
justifyCenter | |
justifyFull | |
justifyLeft | |
justifyRight | |
Выступ | |
⋮ Команды буфера обмена | |
копия | Текущая выбранная строка |
резать | Текущая выбранная строка |
вставить | |
⋮ Различные команды | |
defaultParagraphSeparator | |
переделывать | |
выбрать все | |
styleWithCSS | |
расстегивать | |
useCSS |
форматирование
Пользователи могут добавлять форматирование в contenteditable
документы или элементы, используя функции своего браузера, такие как общие сочетания клавиш для форматирования ( Ctrl-B для жирного шрифта , Ctrl-I для курсива и т. Д.) Или путем перетаскивания изображений, ссылок или разметки из буфер обмена.
Кроме того, разработчики могут использовать JavaScript для применения форматирования к текущему выбору (выделенный текст).
document.execCommand('bold', false, null); // toggles bold formatting
document.execCommand('italic', false, null); // toggles italic formatting
document.execCommand('underline', false, null); // toggles underline
Прослушивание изменений contenteditable
События, которые работают с большинством элементов формы (например, change
, keydown
, keyup
, keypress
), не работают с contenteditable
.
Вместо этого вы можете прослушивать изменения contenteditable
контента с помощью input
события. Предполагая, что contenteditableHtmlElement
является объектом JS DOM, который является contenteditable
:
contenteditableHtmlElement.addEventListener("input", function() {
console.log("contenteditable element changed");
});
Начиная
Атрибут HTML contenteditable
обеспечивает простой способ превратить элемент HTML в редактируемую пользователем область
<div contenteditable>You can <b>edit</b> me!</div>
Редактирование собственного Rich-Text
Использование JavaScript и execCommand
W3C вы можете дополнительно передать больше функций редактирования в настоящее время сосредоточены contenteditable
элементов ( в частности , в позиции курсора или выбора).
execCommand
функции execCommand
принимает 3 аргумента
document.execCommand(commandId, showUI, value)
-
commandId
String. из списка доступных ** commandId ** s
(см .: Параметры → commandId ) -
showUI
Boolean (не реализовано. Использоватьfalse
) -
value
строки Если команда ожидает команды , связанные с строковое значение, в противном случае""
.
(см. Параметры → значение )
Пример использования "bold"
команды и "formatBlock"
(где , как ожидается , значение):
document.execCommand("bold", false, ""); // Make selected text bold
document.execCommand("formatBlock", false, "H2"); // Make selected text Block-level <h2>
Пример быстрого запуска:
<button data-edit="bold"><b>B</b></button>
<button data-edit="italic"><i>I</i></button>
<button data-edit="formatBlock:p">P</button>
<button data-edit="formatBlock:H1">H1</button>
<button data-edit="insertUnorderedList">UL</button>
<button data-edit="justifyLeft">⇤</button>
<button data-edit="justifyRight">⇥</button>
<button data-edit="removeFormat">×</button>
<div contenteditable><p>Edit me!</p></div>
<script>
[].forEach.call(document.querySelectorAll("[data-edit]"), function(btn) {
btn.addEventListener("click", edit, false);
});
function edit(event) {
event.preventDefault();
var cmd_val = this.dataset.edit.split(":");
document.execCommand(cmd_val[0], false, cmd_val[1]);
}
<script>
jsFiddle demo
Пример редактора Rich-Text (современные браузеры)
Последние мысли
Даже присутствуя в течение длительного времени (IE6), реализации и поведение execCommand
варьируются от браузера к браузеру, что делает «создание полнофункционального и совместимого с несколькими браузерами WYSIWYG-редактора» трудной задачей для любого опытного разработчика JavaScript.
Даже если вы еще не полностью стандартизированы, вы можете ожидать довольно приличных результатов в новых браузерах, таких как Chrome, Firefox, Edge . Если вам нужна более эффективная поддержка для других браузеров и других функций, таких как редактирование HTMLTable и т. Д., Главное правило - искать уже существующий и надежный редактор Rich-Text .
Скопируйте в буфер обмена из textarea с помощью execCommand («copy»)
Пример:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<textarea id="content"></textarea>
<input type="button" id="copyID" value="Copy" />
<script type="text/javascript">
var button = document.getElementById("copyID"),
input = document.getElementById("content");
button.addEventListener("click", function(event) {
event.preventDefault();
input.select();
document.execCommand("copy");
});
</script>
</body>
</html>
document.execCommand("copy")
копирует текущий выбор в буфер обмена