применить стиль с помощью execCommand к произвольному тексту

я знаю, как выполнить execCommand для некоторого выделенного текста, но есть ли способ выполнить какой-либо другой текст в моем contenteditable div?


person jney    schedule 30.01.2011    source источник


Ответы (2)


В ИЕ да. В других браузерах нет.

Все основные настольные браузеры реализуют некоторую форму document.execCommand(), которая действует только при выборе пользователем. В IE объект TextRange также имеет метод execCommand. Например, следующее сделает текстовое содержимое элемента зеленым, когда пользователь наведет на него курсор:

<div id="test">Here is a test div</div>

<script type="text/javascript">
    var div = document.getElementById("test");
    div.onmouseover = function() {
        if (document.body.createTextRange) {
            var textRange = document.body.createTextRange();
            textRange.moveToElementText(div);
            textRange.execCommand("foreColor", false, "green");
        }
    };
</script>
person Tim Down    schedule 31.01.2011

Если вы не знаете, .execCommand — это нестандартная функция javascript только для IE, которой следует избегать.

Если вы сообщите нам, для чего вы хотите его использовать, мы можем предложить альтернативу, соответствующую стандартам.

person Raynos    schedule 31.01.2011
comment
document.execCommand, который работает только с текущим выбором, на самом деле хорошо поддерживается. В Firefox это было еще до версии 1.0, а в WebKit, по-моему, примерно с Safari 2.0. Opera также поддерживает его как минимум с версии 9.0. - person Tim Down; 31.01.2011
comment
@TimDown execCommand, похоже, действительно хорошо поддерживается. Хотя это задокументировано в каких-либо спецификациях? Я чувствую, что все, что он использует, является хакерским - person Raynos; 31.01.2011
comment
Это, конечно, не последовательно реализовано. Предпринимаются попытки указать его в HTML5, хотя насколько он окончательный, я не знаю. dev.w3.org/html5/spec/Overview.html#execCommand - person Tim Down; 31.01.2011
comment
.execCommand является частью API редактирования в HTML5, поэтому он не является нестандартным. Конечно, спецификация HTML5 не доработана, поэтому, если они ее по какой-то причине дернут, мне придется извиниться. :-) Подробнее читайте здесь: dev.w3.org/html5/spec /Overview.html#editing-apis - person james.garriss; 12.07.2011
comment
@james.gariss да, он находится в процессе стандартизации. Но начиналось как нестандартное расширение. - person Raynos; 13.07.2011