javascript - 使用 jquery(简单的文本编辑器)向 textarea 添加值

标签 javascript jquery

我正在尝试制作一个简单的文本编辑器。它工作正常,但我想在 textarea 的选定文本上添加文本。

在我的代码中,当我单击粗体按钮时,它会显示 [b][/b] 并且光标集中在 b 标签内,当我再次单击该按钮时,它将再次显示在 b 标签内。 (这就是我想要的,不要介意这段代码)

function typeInTextarea(el, newText) 
{
    var start = el.prop("selectionStart")
    var end = el.prop("selectionEnd")
    var text = el.val()
    var before = text.substring(0, start)
    var after  = text.substring(end, text.length)

    el.val(before + newText + after)
    el[0].selectionStart = el[0].selectionEnd = start - 4 + newText.length
    el.focus()
    return false
}

$("#button-bold").on("click", function()
{
    typeInTextarea($("#textareapost"), "[b][/b]")
    return false
});

我现在看到的是,当我选择“abcd”然后单击按钮时,它会显示 [b]abcd[/b],我成功使用此代码:

function typeInTextarea(el, newText) 
{
    var start = el.prop("selectionStart")
    var end = el.prop("selectionEnd")
    var text = el.val()
    var before = text.substring(0, start)
    var after  = text.substring(end, text.length)


    el.val(before + newText.substring(0,3) + after + newText.substring(3,7)) //i making change in this one 
    el[0].selectionStart = el[0].selectionEnd = newText.length + end
    el.focus()
    return false    
}

但是当我没有选择“abcd”文本时,它会显示[b]abcd[/b][b][abcd/b]。就像复制文本的值一样。

我要问的是,如何为所选文本增加值(value)(而不是替换它) 并在选择文本时制作 if 函数将添加 [b]abcd[/b] 否则将添加 [b] [/b] 而 [b]abcd[/b] 仍然存在。

基本上它会像 stackoverflow 编辑器,但没有实时 View 。感谢提前,希望我找到了答案。已经找了一个星期了。

最佳答案

找到 1 个答案
JQUERY Set Textarea Cursor to End of Text 并修改为

var b = { pos: 3, txt: function(s){ return '[b]' + s +'[/b]'; }}

$.fn.selectRange = function(start, end) {
    return this.each(function() {
        if (this.setSelectionRange) {
            this.focus();
            this.setSelectionRange(start, end);
        } else if (this.createTextRange) {
            var range = this.createTextRange();
            range.collapse(true);
            range.moveEnd('character', end);
            range.moveStart('character', start);
            range.select();
        }
    });
};

$('#this-b').on('click',function(e){
    var cc = $('#this-txta')[0].selectionStart;
    var str = $('#this-txta').val();
    var en = $('#this-txta')[0].selectionEnd;
    var sstr = str.substring(cc,en);
    $('#this-txta').val( str.substring(0, cc) + b.txt(sstr) + str.substring(en) ).focus();
    var pst = cc + b.pos
    var pen = en + b.pos
    $('#this-txta').selectRange(pst,pen);
    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="this-b"><b>B</b></button>
<br/>
<textarea id="this-txta">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</textarea>

关于javascript - 使用 jquery(简单的文本编辑器)向 textarea 添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35762565/

相关文章:

javascript - 在javascript中获取以英寸为单位的div高度

javascript - 禁用滚动但使用 JavaScript 捕获滚动数据?

javascript - 如何根据下拉菜单向输入添加内容?

javascript - window.unload 在 IE8 中

javascript - 使用状态设置类 if else 与 React 获取未定义错误的状态

javascript - 从N个这样的div中过滤时如何重新初始化一个div位置

javascript - ajax 报告成功但数据库没有任何变化

javascript - 如何让clearTimeout()在setTimeout()中发生?

javascript - 如何增加highchart的高度?

javascript - 计算的属性名称。 "gulp-angular-filesort : unexpected token ["