javascript - 添加变量而不丢失格式
问题描述
我想点击变量,它被添加到光标指示的位置而不会丢失格式。
这个功能有几个小时有效,有几个小时无效,似乎它有自己的意志..
添加变量之前的编辑器:
https://i.stack.imgur.com/dhzfN.jpg
添加变量后:
https://i.stack.imgur.com/xOM3j.jpg
视频:https ://drive.google.com/file/d/1t-_bJL0HCh-c5y4uNQQlhOji8y_KlcPr/view
该变量不会停留在它被标记为要插入的位置,并且文本仍然会丢失格式。
$(document).ready(function() {
$('.button').click(function(event) {
event.preventDefault();
if ($("#editor1").text() == "") {
$("#editor1").text($(this).html());
} else {
$("#editor1").text($("#editor1").text() + $(this).html());
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="editor1" name="name" rows="8" cols="80">
TERMO CONTRATUAL
CONTRATADO: AAAAA, razão social: AAAAA, pessoa jurídica de direito privado, inscrita no CNPJ/MF sob o nº AAAAAA, estabelecida à AAAAAA;
CONTRATANTE e/ou ALUNO:
</textarea>
<br>
<small>ALUNO...:
- <a href="#" title="Rua" class="button"> $sAlunoRua</a>
- <a href="#" title="Numero" class="button"> $sAlunoNumero</a>
- <a href="#" title="Bairro" class="button"> $sAlunoBairro</a>
- <a href="#" title="Cidade" class="button"> $sAlunoCidade</a>
</small>
解决方案
看起来您需要获取光标位置的值。我引用了此链接并更新了您的代码,如下所示。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="textareaid" name="name" rows="8" cols="80">
TERMO CONTRATUAL
CONTRATADO: AAAAA, razão social: AAAAA, pessoa jurídica de direito privado, inscrita no CNPJ/MF sob o nº AAAAAA, estabelecida à AAAAAA;
CONTRATANTE e/ou ALUNO:
</textarea>
<br>
- <a href="#" title="Rua" class="button" onclick="insertAtCaret('textareaid', '$sAlunoRua');return false;">$sAlunoRua</a>
- <a href="#" title="Numero" class="button" onclick="insertAtCaret('textareaid', '$sAlunoNumero');return false;">$sAlunoNumero</a>
- <a href="#" title="Bairro" class="button" onclick="insertAtCaret('textareaid', '$sAlunoBairro');return false;">$sAlunoBairro</a>
- <a href="#" title="Cidade" class="button" onclick="insertAtCaret('textareaid', '$sAlunoCidade');return false;"> $sAlunoCidade</a>
<script>
function insertAtCaret(areaId, text) {
var txtarea = document.getElementById(areaId);
if (!txtarea) {
return;
}
var scrollPos = txtarea.scrollTop;
var strPos = 0;
var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
"ff" : (document.selection ? "ie" : false));
if (br == "ie") {
txtarea.focus();
var range = document.selection.createRange();
range.moveStart('character', -txtarea.value.length);
strPos = range.text.length;
} else if (br == "ff") {
strPos = txtarea.selectionStart;
}
var front = (txtarea.value).substring(0, strPos);
var back = (txtarea.value).substring(strPos, txtarea.value.length);
txtarea.value = front + text + back;
strPos = strPos + text.length;
if (br == "ie") {
txtarea.focus();
var ieRange = document.selection.createRange();
ieRange.moveStart('character', -txtarea.value.length);
ieRange.moveStart('character', strPos);
ieRange.moveEnd('character', 0);
ieRange.select();
} else if (br == "ff") {
txtarea.selectionStart = strPos;
txtarea.selectionEnd = strPos;
txtarea.focus();
}
txtarea.scrollTop = scrollPos;
}
</script>
推荐阅读
- reactjs - 反应“类似路由器”的动画
- sql-server - 如何创建检查状态、验证然后更新状态的存储过程?
- python - 熊猫数据框中的舍入和千位分隔符:无法摆脱小数
- excel - 处理数组以避免错误
- arrays - 如何在 Visual Basic 中使用负数和重复数字对数组进行排序?
- julia - 向 JuMP 添加矢量化约束时引发错误
- r - 如何为R中不同变量组的聚类结果创建统计摘要
- rundeck - 开源:配置属性文件中 JDBC 密码的加密
- javascript - 旋转木马滑块在使用 *ngFor 时无法在 Angular 8 中工作
- windows - Internet Explorer 忽略 Flash mms.cfg 设置