Iframe JS вопросы о текстовом редакторе - PullRequest
2 голосов
/ 03 июня 2011

Я создал текстовый редактор iframe и хотел бы знать следующее:

Как мне нажать клавишу, чтобы она не добавлялась в текстовый редактор.Ex нажмите клавишу «Вниз» или «Ввод» и не добавляйте разрыв в текстовый редактор.??

и

Как мне узнать, где находится пишущая вещь?В основном, как я могу выяснить, как Мэнни-персонажи стоят за мигающим предметом, из которого выходит текст (не знаю, как он называется)?

Я хотел бы иметь возможность набрать: «123 | test 32» и иметьмоя вещь для письма, где |и знайте, что в нем 3 символа.больше EX "12345 | 678" возвращает 5. "1234 |"возвращает 4

Мне не нужно, чтобы вы выписывали целую функцию, просто, пожалуйста, кто-нибудь может указать мне правильное направление.

Спасибо.

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Вам необходимо фиксировать каждую клавишу, нажатую в течение всей редакции вашего текста, и оценивать каждого.Проблема в том, что это может быть очень медленно, и вы можете ждать много времени от нажатой клавиши до нажатой клавиши.

Другим решением может быть запись всего в виде буфера, а затем, когда вы закончите издание, проанализируете весь текст и попытайтесь выяснить, какие ключи не являются редактирующими.Вы можете сделать это, например, с помощью специальных символов.

Хороший вопрос.

0 голосов
/ 06 июня 2011

Чтобы предотвратить нажатие клавиши при вставке символа в содержимое редактора, добавьте прослушиватель события keypress в документ iframe и вызовите метод preventDefault() события (или установите returnValue на false в IE<9): </p>

var iframe = document.getElementById("your_iframe_id");
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;

if (iframeDoc.addEventListener) {
    iframeDoc.addEventListener("keypress", function(e) {
        e.preventDefault();
    }, false);
} else if (iframeDoc.attachEvent) {
    iframeDoc.attachEvent("onkeypress", function(e) {
        e.returnValue = false;
    });
}

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

function getCaretCharacterOffset(iframe) {
    var win = iframe.contentWindow, doc = win.document;
    var caretOffset = 0;
    if (typeof win.getSelection != "undefined") {
        var range = win.getSelection().getRangeAt(0);
        var preCaretRange = range.cloneRange();
        preCaretRange.selectNodeContents(element);
        preCaretRange.setEnd(range.endContainer, range.endOffset);
        caretOffset = preCaretRange.toString().length;
    } else if (typeof doc.selection != "undefined" && doc.selection.type != "Control") {
        var textRange = doc.selection.createRange();
        var preCaretTextRange = doc.body.createTextRange();
        preCaretTextRange.moveToElementText(element);
        preCaretTextRange.setEndPoint("EndToEnd", textRange);
        caretOffset = preCaretTextRange.text.length;
    }
    return caretOffset;
}

alert( getCaretCharacterOffset(iframe) );
...