如何解决自动将选择扩展到一行行
尝试将 html 标签添加到 textarea 值
例如 - 请选择 dolor sit
两行块 - 然后点击按钮
选择转换为html
问题 - 有没有办法在不手动选择的情况下做同样的事情
只需将carret放入一行行中
并单击按钮 - 自动从块的开始到结束扩展选择
每个块被\n\n
划分
$('button').on('click',function(){
let v = $(tx).val().trim();
let a = $(tx).prop('selectionStart');
let b = $(tx).prop('selectionEnd');
var c = $(tx).val().substring(a,b);
var res = '<p>' + c + '</p>';
res = res.replaceAll("\n","<br>\n");
v = v.replace(c,res);
$(tx).val(v);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id='tx' rows = "9">
lorem
ipsum
dolor sit
dolor sit
</textarea>
<button>CLICK</button>
解决方法
- 您的
replace
调用 (v = v.replace(c,res);
) 很危险,因为它依赖于价值而不考虑指数。我也修好了。 - 我的解决方案的想法是查找前一个分隔符 (
\n\n
) 位置(如果没有,则查找文本的开头)和下一个分隔符位置(如果没有,则查找文本的结尾) )。然后抓住块,操作它,并用操作的块替换原始块(考虑索引)。
祝你好运。
const replaceBetweenIndices = (origin,startIndex,endIndex,insertion) =>
origin.substring(0,startIndex) + insertion + origin.substring(endIndex);
$('button').on('click',function(){
const delimiter = '\n\n';
const delimiterLength = delimiter.length;
let originalText = $(tx).val();
let begSel = parseInt($(tx).prop('selectionStart'));
let endSel = parseInt($(tx).prop('selectionEnd'));
var beg,end;
for(beg = begSel; beg !== 0 && ( beg < delimiterLength || originalText.substring(beg - delimiterLength,beg) !== delimiter ); beg-- );
for(end = endSel; end !== originalText.length && (end > originalText.length - delimiterLength || originalText.substr(end,delimiterLength) !== delimiter); end++);
const block = originalText.substring(beg,end);
manipulatedBlock = `<p>${block.replaceAll("\n","<br>\n")}</p>`;
manipulatedText = originalText.substring(0,beg) + manipulatedBlock + originalText.substring(end);
manipulatedText = manipulatedText.trim();
$(tx).val(manipulatedText);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id='tx' rows = "9">
lorem
ipsum
dolor sit
dolor sit
</textarea>
<button>CLICK</button>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。