我目前正在为学校开展一个项目,我需要创建一个博客。我们的部分工作是创建一个输入字段,允许用户在字段中自定义其文本的样式。虽然我环顾四周,但我没有找到我正在寻找的东西。为了澄清,目标是在创建帖子时创建一个类似于此处字段的字段(下面包含照片)。
我假设需要Javascript和/或JQuery,虽然我不确定从哪里开始。功能包括文本样式,添加链接,跟踪[返回](创建新段落)和任何其他HTML / CSS元素。
下面,我将列举一些我想要的内容,以防万一我不清楚。
提前感谢您的任何帮助/指导!
示例1:
例2:
答案 0 :(得分:1)
答案 1 :(得分:1)
只要使用tinymce - 除非你的任务是创建实际的控件本身,这甚至比创建一个博客更复杂。
在这里获取TinyMCE: https://github.com/tinymce
或在他们的网站上: https://www.tinymce.com/
然后创建一个textarea元素并启动控件:
在页面底部包含TinyMCE,并在下面包含此脚本。
示例@TinyMCE网站:https://www.tinymce.com/docs/demo/basic-example/#liveexample
<强> HTML:强>
<textarea></textarea>
<强>使用Javascript:强>
tinymce.init({
selector: 'textarea',
height: 500,
plugins: [
'advlist autolink lists link image charmap print preview anchor',
'searchreplace visualblocks code fullscreen',
'insertdatetime media table contextmenu paste code'
],
toolbar: 'insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',
content_css: [
'//fast.fonts.net/cssapi/e6dc9b99-64fe-4292-ad98-6974f93cd2a2.css',
'//www.tinymce.com/css/codepen.min.css'
]
});
答案 2 :(得分:1)
你可以自己创建它!
我几分钟就把它扔了。它非常简陋,但如果您想自己构建它,这可能是您的起点:
var areas = document.getElementsByClassName('augmented-textarea');
var commands = [{
display: "<b>B</b>",
f: function(text) {
return "**" + text + "**";
},
}, {
display: "<i>I</i>",
f: function(text) {
return "_" + text + "_";
},
}, ];
Array.prototype.forEach.call(areas, initTextarea);
function initTextarea(t) {
var wrapper = document.createElement('div');
wrapper.classList.add('textarea-wrapper');
var bar = document.createElement('div');
bar.classList.add('textarea-bar');
commands.forEach(function(c) {
var b = document.createElement('button');
b.type = 'button';
b.innerHTML = c.display;
b.addEventListener('click', function() {
if (t.selectionStart === t.selectionEnd)
return;
var v = t.value,
ss = t.selectionStart,
se = t.selectionEnd,
prefix = v.slice(0, ss),
suffix = v.slice(se),
target = v.substring(ss, se),
changed = c.f(target);
t.value = prefix + changed + suffix;
t.selectionStart = ss;
t.selectionEnd = ss + changed.length;
t.focus();
});
bar.appendChild(b);
});
t.parentNode.insertBefore(wrapper, t);
t.parentNode.removeChild(t);
wrapper.appendChild(bar);
wrapper.appendChild(t);
}
&#13;
.textarea-wrapper {
display: flex;
overflow: hidden;
width: 300px;
flex-direction: column;
border: 1px solid gray;
}
.textarea-bar {
background-color: #ddd;
min-height: 30px;
line-height: 30px;
}
.textarea-bar button {
background-color: #ddd;
font-family: serif;
font-size: 20px;
width: 30px;
display: inline-block;
border: 1px solid gray;
border-radius: 3px;
margin: 3px;
cursor: pointer;
}
.augmented-textarea {
width: 100%;
max-width: 100%;
height: 70px;
box-sizing: border-box;
border: 0;
}
&#13;
<textarea class="augmented-textarea">Select some text and press one of the buttons above!</textarea>
&#13;
每个命令都在commands
数组中注册,带有按钮的HTML,以及用于处理所选文本的指令。