2010-12-02 2 views
5

У меня есть редактируемый div, и я использую кнопку для вставки изображения в div. Прямо сейчас, я просто делаю document.getElementById ('elementid'). InnerHTML. + =; чтобы получить изображение, добавленное в конец div. Я хотел бы ввести изображение, где находится каретка. Как мне это сделать?Editable Div Caret Position

Благодаря

ответ

3

Вставить элемент в каретку не слишком сложно. Следующая функция вставляет узел в каретку (или в конце выбора, если выбрано содержание) во всех основных браузерах:

function insertNodeAfterSelection(node) { 
    var sel, range, html; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.getRangeAt && sel.rangeCount) { 
      range = sel.getRangeAt(0); 
      range.collapse(false); 
      range.insertNode(node); 
     } 
    } else if (document.selection && document.selection.createRange) { 
     range = document.selection.createRange(); 
     range.collapse(false); 
     html = (node.nodeType == 3) ? node.data : node.outerHTML; 
     range.pasteHTML(html); 
    } 
} 
0

ли эта помощь: http://jsfiddle.net/8akDr/

+0

Я понимаю, что вы просто заменить вставленный символ/набор символов, но как бы я хотел вставить персонажа в позицию каретки. Должна ли она быть симулированной клавиатурой или каким-то еще? – intl 2010-12-02 21:18:25

+1

Вау ... Мне очень стыдно говорить, что я думал, что ты имеешь в виду каретку, как в буквальном смысле слова в тексте ... Я извиняюсь за свое недоразумение :( – 2010-12-02 21:32:05

2

Я ненавижу казаться отрицательным, но это так трудно это смешно. Вы должны иметь дело с IE и другими, а реализации сильно различаются. Но там, где это становится сложно, если вы нажмете кнопку, чтобы вставить изображение, вы потеряете фокус и позицию каретки, поэтому вам нужно запомнить позицию с некоторыми возможностями закладки закладок (опять же, IE по-разному). Основное внимание уделяется не столько проблеме, если ваше editablecontent находится в iframe и поддерживает свой собственный фокус. (Примечание: я не рекомендую IE здесь, я предпочитаю их реализацию стандарту drek W3C.)

Вы можете посмотреть некоторые текстовые редакторы с открытым кодом для подсказок и подсказок. Но вы найдете огромное количество кода для решения этих простых задач.

+0

Есть трудности, о которых вы упоминаете, но они не непреодолимая. Моя библиотека Rangy (http://code.google.com/p/rangy) может помочь большинству из них: она предоставляет один API и методы для сохранения и восстановления выбора. Я в основном не согласен с вами относительно выбора IE/TextRange лучше, чем стандарты DOM: `Range` значительно превосходит` TextRange` в большинстве способов, за исключением перемещения границ для включения слов и перехода к смежному тексту в документе. Нет стандарта для объектов выбора (WHATWG работает) но выбор IE не имеет ничего общего с другими браузерами. – 2010-12-03 10:26:37

Смежные вопросы