我研究了textarea中的StackOverflow编号列表,这是我观察到的
1. List Item
的内容,再次点击时会插入2. List item
3
个列表项并删除1. List Item
并再次点击该链接,或者您分为两行,则2. List item
更改为1. List Item
和{ {1}}更改为3
,2
和1. List Item
代替2. List Item
和2. List Item
3. List Item
个列表项并且您分为两行,请输入一些文字并再次点击该链接,列表项再次从3
开始1. List Item
。它还会检测列表项的总金额,如果前一个列表项为1
且列表项的总金额仅为两个,则会自动将其更改为4
和1. List Item
< / LI>
醇>
这是一个简短的video,显示了我的观察结果。
我想实现StackOverflow使用的相同功能。
2. List Item
并自动增加,直到检测到两次换行1. List Item
开始,而不是从我停止的最后一行开始。以下代码用于在textarea中添加文本
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
。但如果有任何替代方案,我将不胜感激
答案 0 :(得分:1)
你使这比它需要的更复杂。您可以轻松地创建contentEditable
div并在每次点击触发时更改其有序列表的内容:
<强> HTML 强>
<a href="javascript:;">click here for numbered list</a>
<div id="text_area" contentEditable="true">
<ol></ol>
</div>
<强> JS 强>
$('a').click(function () {
$('ol').append("<li class='list-item'></li>");
$('.list-item').each(function(i){
$(this).text('List Item');
})
});
<强> CSS 强>
确保div看起来像文本区域:
#text_area{
height:auto;
width:400px;
background:white;
border:1px solid silver;
resize: vertical;
overflow:auto;
}
您可以看到默认的HTML列表属性以及contentEditable可以轻松删除列表节点并添加它们,同时保持编号不变。
https://jsfiddle.net/r9ev1oe9/1/
您可以通过创建2个按钮来处理添加多个列表的情况。一个创建新列表,一个将列表项添加到该列表。
答案 1 :(得分:0)
这里我做了一些看起来很像stackoverflow的项目。虽然stackoverflow不是100%相同,但至少它具有stackoverflow的大多数功能,你可以在这里查看它(http://stack.stephensangkn.org)。但我故意发布图像上传,因为它与服务器有关。我认为这很酷。您还可以在页面中看到下载链接以下载源代码