我想实现一个区域来实现3个基本任务:
我已经检查了一些现有问题,似乎textarea
无法为文本的一部分着色,这很可惜。
有人建议使用<div contentEditable>
。然后我实现了这个JSBin。
所以我的第一个麻烦是如何构建函数以将文本放在几行中。与textarea
不同,$('#ce span').text("line1 \n line2\n line3")
会忽略\n
和空格,并仍然将它们显示在一行中。
有人可以帮忙吗?
此外,是否有人知道任何其他解决方案(不是太复杂并且实现上述3个基本任务,例如JQuery
}而不是<div contentEditable>
?
答案 0 :(得分:1)
如果您希望文本显示在单独的行上,您可以使用
$('#ce').html("<span>line1<br>line2<br>line3");
代替。 html将在每次运行时创建整个内容,您可以在其中使用标记。
为每个可能有效的连续行添加4个空格
<script>
$('#ce').html("<span>line1</span><br><span>line2</span><br><span>line3</span>");
var spaces = ' '.repeat(4),
i = 2,
spans = $('#ce').find('span').length;
for (i; i <= spans; i++) {
$('#ce').find('span:nth-of-type(' + i + ')').prepend(spaces.repeat(i - 1));
}
</script>
在每次中断后插入空格的另一个选项,因此您不需要额外的跨度:
<script>
$('#ce').html("<span>line1<br>line2<br>line3</span>");
var spaces = ' '.repeat(4),
i = 1,
breaks = $('#ce').find('br').length;
for (i; i <= breaks; i++) {
$('<span>' + spaces.repeat(i) + '</span>').insertAfter($('#ce').find('br:nth-of-type(' + (i) + ')'))
}
</script>
答案 1 :(得分:0)
您必须从输入文本更改为输入html到可编辑的div。然后,您可以为每行周围的每个跨度提供一个类。最后,运行each()
JQuery语句来增加每行的左边距:
$('#ce span').html("<span class='indented'>line1</span><br><span class='indented'>line2</span><br><span class='indented'>line3</span>");
var indented = 0;
$('.indented').each(function(index){
$(this).css('marginLeft',indented);
indented += 25;
})
如果你想继续每一行的边距,它会更复杂。您必须为用户点击&#34; Enter&#34;创建一个事件监听器。或者去下一行。
这是一个JSFiddle:https://jsfiddle.net/0om2ce5e/
更多功能
如果您想要更多功能,可以在每一行上追加越来越多的空格。当用户进入下一行时,您必须添加一个事件监听器:
$('#ce span').html("<span class='indented'>line1</span><br><span class='indented'>line2</span><br><span class='indented'>line3</span>");
var indented = 0;
$('.indented').each(function(index){
spaces = "";
for(var i = 0; i < index; i++){
spaces += "   ";
}
var origin = $(this).html();
var newVal = spaces+origin;
$(this).html(newVal);
})