2011-01-22 2 views
0

Я хочу поместить некоторый указанный текст (где это возможно/любое редактируемое поле) до и после любого выделенного текста в документе HTML. document.getSelection() или document.selection.createRange().text возвращает только сам текст, а не позицию. Есть ли способ заменить выделенный текст? В любом случае, чтобы вставить конкретный текст до и после опубликованного текста в любом месте документа?Вставить текст до и после выбранного текста в javascript

+0

Не могли бы вы получить строку, добавить, что вы хотите в начале и конце, а затем снова вставьте в исходное положение? – JakeParis

+0

Как «повторно вставить» в «исходную позицию» – SMUsamaShah

ответ

4

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

Живой пример: http://jsfiddle.net/timdown/UWExN/64/

function insertHtmlAtSelectionEnd(html, isBefore) { 
    var sel, range, node; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.getRangeAt && sel.rangeCount) { 
      range = window.getSelection().getRangeAt(0); 
      range.collapse(isBefore); 

      // Range.createContextualFragment() would be useful here but was 
      // until recently non-standard and not supported in all browsers 
      // (IE9, for one) 
      var el = document.createElement("div"); 
      el.innerHTML = html; 
      var frag = document.createDocumentFragment(), node, lastNode; 
      while ((node = el.firstChild)) { 
       lastNode = frag.appendChild(node); 
      } 
      range.insertNode(frag); 
     } 
    } else if (document.selection && document.selection.createRange) { 
     range = document.selection.createRange(); 
     range.collapse(isBefore); 
     range.pasteHTML(html); 
    } 
} 
+0

извините, моя ошибка параметров – SMUsamaShah

+0

@ LifeH2O: В чем проблема? –

+0

в Internet explorer 8 Я получаю неуказанную ошибку на 'range.pasteHTML (html);' где isAfter было true, а html был «text» – SMUsamaShah

5

Попробуйте это:

var r = document.selection.createRange(); 

r.text = "before" + r.text; 
r.text += "after"; 
+0

он работает .. Спасибо! – SMUsamaShah

+0

Это только IE. –

+0

О, дерьмо ... У вас есть решение Opera? – SMUsamaShah

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