2011-11-27 26 views
6

Seçilen metnin öncesinde veya sonrasında bir öğe oluşturmama izin veren işlevi arıyorum. javascript replace selection all browsers gibi buna benzer bir şey ancak seçimden önce ya da sonra değiştirmeden önce ya da sonra bazı içerik eklemek için, after() ve before() jQuery yöntemleri gibi. Bazı DOM seçim yöntemlerini kullanmalı mıyım? Yoksa bunu yürütmek daha kolay bir şey var mı?Metin seçiminden önce/sonra öğe ekle

MSIE olarak
+0

Sorumun cevabı değil ama: Ben kullanmakta oldukça kolay yapabilirsiniz bahis Tim Down [rangy] (http://code.google.com/p/rangy /) kütüphanesi. –

cevap

10

Bunu yapmak için bir çift işlev var.

Canlı örnek: http://jsfiddle.net/hjfVw/

Kodu:

var insertHtmlBeforeSelection, insertHtmlAfterSelection; 

(function() { 
    function createInserter(isBefore) { 
     return function(html) { 
      var sel, range, node; 
      if (window.getSelection) { 
       // IE9 and non-IE 
       sel = window.getSelection(); 
       if (sel.getRangeAt && sel.rangeCount) { 
        range = window.getSelection().getRangeAt(0); 
        range.collapse(isBefore); 

        // Range.createContextualFragment() would be useful here but is 
        // 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) { 
       // IE < 9 
       range = document.selection.createRange(); 
       range.collapse(isBefore); 
       range.pasteHTML(html); 
      } 
     } 
    } 

    insertHtmlBeforeSelection = createInserter(true); 
    insertHtmlAfterSelection = createInserter(false); 
})(); 
2

: collapse verilen aralık ve elemanı

Diğer eklemek için kullanımı pasteHTML: Ayrıca collapse verilen aralığı ve insertNode


Hem ile eleman eklemek daraltma yöntemleri, daraltmak istediğiniz yere tanımlayan isteğe bağlı bir argümanı kabul eder. Öğeyi sonuna koymak isterseniz, aksi halde baştan sonuna kadar daraltın.