文本区域标签高亮显示应用于第一行之后的错误位置
Textarea hashtag highlight is applied to the wrong position after the first line
当我要转到新行并从该行的开头开始标签时,荧光笔会将颜色应用到前一行。
<style>
#input{
color: transparent;
}
#input b{
text-decoration: none;
color: transparent;
background-color: #9aceff;
font-weight: normal;
}
#t{
background-color: transparent;
}
</style>
<textarea id="t" style="width: 342px; height: 92px; resize: none; position: absolute; z-index: 1; border: 1px solid #212;font-family: arial; padding: 20px; margin: 0; font-size: 12px;">
</textarea>
<div style="width: 300px; height: 50px; border: 1px solid #212; font-family: arial; padding: 20px; position: absolute; z-index: 0; margin: 0; font-size: 12px;" id="input">
</div>
<script>
$(document).ready(function(){
$('#t').on('input keyup', function() {
var str = $(this).val();
str = str.replace(/(<.+?>)/gi, '');
str = str.replace(/(?:'s|^)#([^0-9'W's][a-zA-z0-9]*)/g, ' <b>#$1</b>');
str = str.replace(/(?:'r'n|'n'r|'r|'n)/g, '<br />');
$('#input').html(str);
});
});
</script>
这是我的jsfiddle代码。
您在这里面临的问题是,在<br />
元素最终替换换行符之前,正则表达式正在用空格替换换行符。
因此,如果哈希字符串前面有换行符,高亮显示将出现在前一行,而不是正确地与哈希字符串放在同一行。
对此的一个快速解决方案是交换最后两个字符串替换,并在<br />
后面添加一个空格,以避免它包含在散列字符串中:
$(document).ready(function(){
$('#t').on('input keyup', function() {
var str = $(this).val();
str = str.replace(/(<.+?>)/gi, '');
str = str.replace(/(?:'r'n|'n'r|'r|'n)/g, '<br /> ');
str = str.replace(/(?:'s|^)#([^0-9'W's][a-zA-z0-9]*)/g, ' <b>#$1</b>');
$('#input').html(str);
});
});
下面是一个更新的JSFiddle演示。希望这能有所帮助!如果你有任何问题,请告诉我。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 在chrome.tabs.onCreated之后加载HTML页面
- 在Jquery detachment()和appendTo()之后定位元素
- AngularJS:ng之后,重复$scope值未按预期更新
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 为什么元素的宽度在页面加载之后和那一刻之后不同
- 动态插入的表:JQuery未检测到最后一行
- 没有在Angular应用程序中定义firebase(在firebase迁移之后)
- 如何使段落在从包装标题的最后一行开始的浮动标题之后流动
- Node.js:在文本文件中的特定行之后插入一行
- 在更新数据库中的一行之后,再次运行php行
- Javascript函数在某一行之后停止
- 在表的每行之后添加一行
- 如何仅在第一行代码执行之后执行下一行代码
- 附加到元素的脚本标记会在.append()之后的下一行之前运行吗?
- 如何在表的最后一行之后添加行
- JavaScript For循环在代码的某一行之后不起作用
- 在单击add函数的位置之后添加另一行
- 使用jquery在特定行之后添加一行,并使用滑动效果
- 获取一行中当前选择元素之后的所有选择