如何将文本附加到'<textarea>'?

Posted

技术标签:

【中文标题】如何将文本附加到\'<textarea>\'?【英文标题】:How to append text to '<textarea>'?如何将文本附加到'<textarea>'? 【发布时间】:2011-10-07 18:06:01 【问题描述】:

我有&lt;textarea&gt;,用户可以在其中输入他的消息给全世界!下面,有上传按钮......我很想添加上传文件的链接(别担心,我有);就在他正在输入的文字旁边。

比如,他输入“Hello, world!”,然后上传文件(通过 AJAX 完成),该文件的链接将添加到下一行 &lt;textarea&gt; 的内容中。注意力!是否可以将光标(他离开的地方)保持在同一个地方?

所有这些都可以用 jQuery 完成...有什么想法吗?我知道有方法'append()',但不会是这种情况,对吧?

【问题讨论】:

你不能将 html 添加到 不,我不想那样。我希望它在输出中(毕竟提交并且其他用户查看该帖子)。 据我所知......我可以使用类似 Markdown 或 WYSIWYG 的东西。 jsfiddle.net/roXon/gejA2 (:-|) @roXon 不能那样做。我需要将消息保存到数据库中,然后显示它并转义特殊字符(因此不允许使用 HTML)。 【参考方案1】:

试试

var myTextArea = $('#myTextarea');
myTextArea.val(myTextArea.val() + '\nYour appended stuff');

【讨论】:

但它不会随着你的文本增加而增加时间吗? 所以你搜索 DOM 两次来找到你的Textarea?不好。搜索一次并将其存储为变量。【参考方案2】:

这花了我一些时间,但下面的 jQuery 将完全按照您的意愿行事——它不仅附加文本,而且通过存储光标然后重置它来将光标保持在完全相同的位置:

var selectionStart = $('#your_textarea')[0].selectionStart;
var selectionEnd = $('#your_textarea')[0].selectionEnd;

$('#your_textarea').val($('#your_textarea').val() + 'The text you want to append');

$('#your_textarea')[0].selectionStart = selectionStart;
$('#your_textarea')[0].selectionEnd = selectionEnd;

你应该把它包装在一个函数中。

【讨论】:

看起来棒极了! #a 是什么意思? @daGrevis 哎呀!我的意思是说#your_textarea,当我测试时它只是被称为#a。 selectionStartselectionEnd 在 IE 真的很棒(你没有使用任何其他额外的插件),但它不支持 IE 9 <.> @daGrevis 如果我是你,我会使用它并要求用户更新他们的浏览器以得到完全支持。界面甚至不会被完全破坏,他们只是不会保留他们的选择。这有点像给 IE 6 用户方角而不是 CSS 3 舍入。【参考方案3】:

您可以查看following answer,它提供了一个不错的插件,用于在&lt;textarea&gt; 的插入符号位置插入文本。

【讨论】:

【参考方案4】:

您可以将任何available caret plugins 用于 jQuery,基本上:

    存储当前插入符号位置 将文本附加到文本区域 使用插件替换插入符号位置

如果你想在 jQuery 中添加一个“追加”功能,那么做起来很容易:

(function($)
    $.fn.extend(
        valAppend: function(text)
            return this.each(function(i,e)
                var $e = $(e);
                $e.val($e.val() + text);
            );
        
    );
)(jQuery);

然后您可以通过调用.valAppend() 来use it,引用输入字段。

【讨论】:

如果不让插入符号保持在同一位置...怎么办?我只是在寻找类似append()&lt;textarea&gt; 的东西。 val() 也许? @deGrevis:除了@Darin 的帖子,您还可以使用另一个答案中的this function 将其插入到插入符号的位置。 @daGrevis textarea 的值只是一个字符串;你不需要任何特殊的“append()”函数。 @deGrevis: 或var $ta = $('textarea'); $ta.val($ta.val() + 'new text');【参考方案5】:

您可以使用我的Rangy inputs jQuery plugin,它适用于所有主流浏览器。

var $textarea = $("your_textarea_id");
var sel = $textarea.getSelection();
$textarea.insertText("\nSome text", sel.end).setSelection(sel.start, sel.end);

【讨论】:

以上是关于如何将文本附加到'<textarea>'?的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 将文本附加到 textarea 的末尾

如何在 JavaFX 中延迟 10 秒在 TextArea 中附加文本?

如何使 <textarea> 仅将撇号识别为文本? [关闭]

如何让用户将 html 输入到 textarea 中?如果他们尝试将 <textarea> 包含在文本区域中,我会遇到问题

如何仅使用 css 不使用 javascript 将 <textarea> 高度自动调整为内部文本的高度?

如何使用 PHP 将文本附加到特定标签内的外部 html 文件?