2011-10-12 62 views
1

嗨,這是簡單的jquery fieldselection插件。jQuery fieldselection replaceSelection不適用於我

/* 
* jQuery plugin: fieldSelection - v0.1.1 - last change: 2006-12-16 
* (c) 2006 Alex Brem <[email protected]> - http://blog.0xab.cd 
*/ 

(function() { 

    var fieldSelection = { 

     getSelection: function() { 

      var e = (this.jquery) ? this[0] : this; 

      return (

       /* mozilla/dom 3.0 */ 
       ('selectionStart' in e && function() { 
        var l = e.selectionEnd - e.selectionStart; 
        return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) }; 
       }) || 

       /* exploder */ 
       (document.selection && function() { 

        e.focus(); 

        var r = document.selection.createRange(); 
        if (r === null) { 
         return { start: 0, end: e.value.length, length: 0 } 
        } 

        var re = e.createTextRange(); 
        var rc = re.duplicate(); 
        re.moveToBookmark(r.getBookmark()); 
        rc.setEndPoint('EndToStart', re); 

        return { start: rc.text.length, end: rc.text.length + r.text.length, length: r.text.length, text: r.text }; 
       }) || 

       /* browser not supported */ 
       function() { return null; } 

      )(); 

     }, 

     replaceSelection: function() { 

      var e = (typeof this.id == 'function') ? this.get(0) : this; 
      var text = arguments[0] || ''; 

      return (

       /* mozilla/dom 3.0 */ 
       ('selectionStart' in e && function() { 
        e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length); 
        return this; 
       }) || 

       /* exploder */ 
       (document.selection && function() { 
        e.focus(); 
        document.selection.createRange().text = text; 
        return this; 
       }) || 

       /* browser not supported */ 
       function() { 
        e.value += text; 
        return jQuery(e); 
       } 

      )(); 

     } 

    }; 

    jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; }); 

})(); 

我不明白爲什麼這樣做textarea元素中選定的文本不會被替換。

$('.wysiwyg-editor-italic').live('click',function(){ 
    var _selection = $('.wysiwyg textarea').getSelection().text; 
    var wcode = ""; 

    if(_selection){ 
     $('.wysiwyg textarea').replaceSelection("{italic}"+_selection+"{/italic}"); 
     console.log(_selection); 
    } 
    else{ 
     wcode = "{italic} italic {/italic}"; 
    } 
    var wysiwyg_val = $('.wysiwyg textarea').val(); 

    $('.wysiwyg textarea').val("").val(wysiwyg_val+wcode); 
    $('.wysiwyg-preview').html(wysiwyg_val); 
    $('.wysiwyg textarea').focus(); 



    refresh_preview() 
}); 

在控制檯中,我可以看到_selection這是正常,但之後不會被替換...也許我錯過了somenthing?

+2

它看起來OK我。你可以試試我的類似插件:http://code.google.com/p/rangyinputs/ –

回答

0

不幸的是,它似乎是一個圖書館的錯誤。

我也受到這個錯誤的影響。除了replaceSelection()部分之外,一切檢測和工作都很好。我已經結束了使用Rangyinputs。有一天,當我有空的時候,我會嘗試修復Fieldselection上的這個錯誤並提出請求。