我想在textarea上制作哈希标签,就像这样
<textarea> hi #hash </textarea>
并改变#hash的颜色,如twitter
答案 0 :(得分:7)
我为此制作了一个插件,因为我遇到了同样的问题。 看这里:http://lookapanda.github.io/jquery-hashtags/
答案 1 :(得分:3)
一个简单的建议(未经测试):
由于无法格式化textarea,您可以使用具有contenteditable
属性和简单CSS格式的div来模仿它:
<div id='textarea' contenteditable style="overflow: scroll; border: 1px solid black; width: 200px; height: 100px;"></div>
然后,几行JavaScript(和jQuery):
// when user finished editing
$('#textarea').blur(function() {
// replace hashtags (parsing should prob. be enhanced)
$(this).html($(this).html().replace(/(#\S+)/, '<span style="color: blue">$1</span>');
});
答案 2 :(得分:3)
我知道你已经得到了这个问题的答案,但是如果某人仍然需要除了标记答案之外的其他解决方案,那么请check this link。希望将来有人帮助......
答案 3 :(得分:2)
如果你只是想在textarea中突出显示文本就没问题 - 在这种情况下jquery-hashtags做得很好。
然而,更改文本颜色是另一项业务,因为您无法直接设置textarea样式。我已经设法通过组合,一个小的hacky解决方案来实现它:
<div>
属性contenteditable
而不是<textarea>
要自动突出显示文字,您必须将所有#hashtag提及与另一个可以设置样式的内联html元素包装起来,例如<span style="...">
。 RegEx很好地解决了这个问题:
//Bind this on keyup event
var text = text.replace(/<\/?span>/g, '').replace(/([#]+[A-Za-z0-9-_]+)/g, '<span>$1</span>');
然而,在keyup上替换文本会产生另一个问题 - 它会重置文本光标,因此几乎不可能键入。要解决这个问题,Rangy会有所帮助。它是文本选择库,提供一些实用程序来操作文本字段中的光标位置。要将光标保持在适当的位置,必须在应用文本替换之前保存它,并在它发生后重置它。这是完整的代码:
$("#notes-editor").on("keyup", function(){
var text = $(this).html();
text = text.replace(/<\/?span>/g, '').replace(/([#]+[A-Za-z0-9-_]+)/g, '<span>$1</span>');
savedSel = rangy.getSelection().saveCharacterRanges(this);
$(this).html(text);
rangy.getSelection().restoreCharacterRanges(this, savedSel);
});
答案 4 :(得分:1)
您无法在<textarea>
中执行此操作。您需要在<div>
中执行此操作并编写一组键盘处理程序以在用户键入时更新内容。这不是一项简单的任务。看看CKEDITOR这样的东西,虽然我怀疑这不是你工作的工具。
答案 5 :(得分:1)
由于textareas不支持允许您为特定单词或表达式着色的标记,因此您需要创建一个<div>
,您可以将keyup事件绑定到javascript或jQuery中。通过使用此keyup事件,您可以将键入的字母插入div中,就像有人在文本区域中键入一样。接下来,要为特定的主题标签着色,您需要创建一个正则表达式,然后使用replace
函数将其包装在<a>
标记中并添加所有必需的属性。
我发现这个很酷的教程解析类似Twitter的用户名和主题标签:http://www.simonwhatley.co.uk/parsing-twitter-usernames-hashtags-and-urls-with-javascript
答案 6 :(得分:1)
我认为CodeMirror或类似的编辑器可以解决您的问题 - 只需添加自定义荧光笔即可。唯一的问题是编辑器应该支持可变宽度字体,但我认为CodeMirror支持它。