【发布时间】:2016-06-16 12:44:59
【问题描述】:
我研究了textarea中的StackOverflow编号列表,这是我观察到的
观察
- 单击编号列表链接时,会插入类似
1. List Item的内容,再次单击时会插入2. List item - 现在,如果您有喜欢
3的列表项并删除1. List Item并再次单击链接或将两行分解,则2. List item更改为1. List Item和3更改为2离开你用1. List Item和2. List Item而不是2. List Item和3. List Item - 现在,如果您有
3列表项并且您将其分成两行,请输入一些文本并再次单击该链接,列表项将再次从1. List Item开始 - 最后,它会自动检测上一个列表项编号并增加
1。并且它还会检测列表项的总数,如果前一个是4,而列表项的总数只有两个,它会自动将它们更改为1. List Item和2. List Item
这是一个简短的video,展示了我的观察。
我想要达到的目标
我想实现 StackOverflow 使用的相同功能。
- 点击我的链接时,它会在我的文本区域中插入
1. List Item并自动增加,直到检测到两行中断 - 如果我删除列表项并再次单击链接或断开两行,删除的链接将被自动替换,就像我的第二个观察一样
- 就像我的第三次观察一样,如果我分解两行并输入一些文本并再次单击链接,它将从
1. List Item开始,而不是从我停止的最后一个开始。
我的工作
下面这段代码是我用来在文本区域中添加文本的代码
<a href="javascript:;" alt="text to add into textarea">click here for numbered list</a>
<textarea id="text_area"></textarea>
<script>
$('a').click(function () {
var text = $(this).attr('alt');
ins2pos(text, 'text_area');
});
function ins2pos(str, id) {
var TextArea = document.getElementById(id);
var val = TextArea.value;
var before = val.substring(0, TextArea.selectionStart);
var after = val.substring(TextArea.selectionEnd, val.length);
TextArea.value = before + str + after;
setCursor(TextArea, before.length + str.length);
}
function setCursor(elem, pos) {
if (elem.setSelectionRange) {
elem.focus();
elem.setSelectionRange(pos, pos);
} else if (elem.createTextRange) {
var range = elem.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
</script>
我的问题
请问我如何实现这些。我认为最好的方法是通过jQuery 和JavaScript。但如果有任何替代方案,我将不胜感激
【问题讨论】:
标签: javascript jquery list