在我的页面中,每当用户点击指定的div时,wysiwyg编辑器都会使用该div进行初始化。这很好。但是,问题是光标保持定位在行的开头。即使我选择了单词,光标也会将其自身定位到行的开头,然后取消选择所选单词。如何确保光标位于用户想要或点击的位置?
codepen.io中的示例。
<div id="toolbar_wrapper">
<div id="toolbar">
</div>
</div>
<div id="content">
<div class="redactor">
<h1>Header</h1>
<p>Paragraph</p>
</div>
<div class="redactor">
<h1>Another Header</h1>
<p>Another Paragraph</p>
</div>
</div>
答案 0 :(得分:1)
这是JavaScript代码中的逻辑问题。现在,当你点击其中一个.redactor
div:
.selected
类的编辑器编辑器。.selected
添加到点击的框中。如果单击与已选择的框不同的框,则效果很好,但如果单击所选框,则表示您正在销毁编辑器编辑器,然后再次初始化。这就是每次点击都会导致光标插入符号开始的原因。
一个快速的解决方案是将整个函数包装在一个条件中,因此仅当单击的div
不是已选择的时才应用它:
.selected
:
.selected
类的编辑器编辑器。.selected
添加到点击的框中。你可以在这里看到它(or on this JSFiddle):
$(document).ready(function () {
var current_edit;
function destroy_redactor(param) {
console.log("destroy");
$(param).redactor('core.destroy');
}
function initialize_redactor(param) {
console.log("init");
$(param).redactor({
focus: true,
toolbarExternal: '#toolbar'
});
}
$('.redactor').on("click", function() {
if (!$(this).hasClass("selected")) {
$(".redactor").each(function () {
if($(this).hasClass("selected")) {
destroy_redactor(current_edit);
$(this).removeClass("selected");
}
});
$(this).addClass("selected");
current_edit = $(this);
initialize_redactor(current_edit);
}
});
});
#content {
max-width: 600px;
margin: 0 auto;
border: 1px solid lightgray;
}
.redactor {
border: 1px solid lightgreen;
margin: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//imperavi.com/js/redactor/redactor.css">
<script type="text/javascript" src="//imperavi.com/js/redactor/redactor.js"></script>
<div id="toolbar_wrapper">
<div id="toolbar">
</div>
</div>
<div id="content">
<div class="redactor">
<h1>Header</h1>
<p>Paragraph</p>
</div>
<div class="redactor">
<h1>Another Header</h1>
<p>Another Paragraph</p>
</div>
</div>