Как в визуальном редакторе при нажатии enter, выйти из текущего контейнера?
У меня в редакторе можно добавлять цветные контейнеры
https://javascript.ru/forum/misc/83931-stili-ne-primenyayutsya-v-cvetnykh-blokakh-kursor-redaktirovaniya-otsutsvuet.html. Но есть существенный недостаток из них нельзя выйти, единственный способ это создать новый контейнер, тогда из нового тоже нельзя будет выйти и так получается, что весь текст будет состоять из одних цветных блоков. Если нажать enter, то внутри цветного блока создастся пораграф <p>, что по сути не нужно я не собираюсь писать большие тексты в своих цветных блоках, там будут всего лишь пометки и разбивать их на порагрофы не требуются. Enter мне нужен, чтобы выйти из контейнера (цветного блока). Как при нажатии enter создать пораграф не внутри контейнера, а за его пределами и уже там писать основной текст? Мой код (у iframe я установила размеры, чтобы редактируемая область была больше).
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.js"></script>
</head>
<body>
<input type='button' class='btn-block' data-command='Bold' value='B'/><input type='button' class='btn-block' data-command='Italic' value='I'/>
<button type="button" class="btn-block" data-command="warning" title="Внимание">Внимание</button>
<button type="button" class="btn-block" data-command="important" title="Важно">Важно</button>
<button type="button" class="btn-block" data-command="info" title="Информация">Информация</button>
<button type="button" class="btn-block" data-command="advice" title="Совет">Совет</button>
<button type="button" class="btn-block" data-command="neutrality" title="Нейтральность">Нейтральность</button>
<br />
<iframe scrolling='no' frameborder='no' src='#' id='frameId' name='frameId' width="800" height="400"></iframe>
<form name="myform" action="#" method="post" onsubmit="return save()">
<p>
<input type="hidden" id="content" name="content" value="" />
</p>
<script type="text/javascript">
let edit1;
let doc;
function init()
{
var isGecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
console.log(isGecko);
var iframe = document.getElementById("frameId");
edit1 = iframe.contentWindow;
doc = iframe.contentDocument;
iHTML = "<html><head>";
iHTML += "<link rel=\"stylesheet\" type=\"text/css\" href=\"style2.css\">";
iHTML += "</head><body></body></html>";
doc.open();
doc.write(iHTML);
doc.close();
doc.designMode = "on";
doc.body.contentEditable = true;
$('.btn-block').on("click", function(e) {
e.preventDefault();
e.stopPropagation();
let target = e.target;
tag = target.firstChild;
let myclass = "";
if (target.getAttribute("data-command") === "Bold") {
edit1.focus();
edit1.document.execCommand("bold", null, "");
}
if (target.getAttribute("data-command") === "Italic") {
edit1.focus();
edit1.document.execCommand("italic", null, "");
}
if (target.getAttribute("data-command") === "warning") {
myclass = "warning shortcodestyle";
addBlock(myclass);
} else
if (target.getAttribute("data-command") === "important") {
myclass = "important shortcodestyle";
addBlock(myclass);
} else
if (target.getAttribute("data-command") === "info") {
myclass = "info shortcodestyle";
addBlock(myclass);
}
if (target.getAttribute("data-command") === "advice") {
myclass = "advice shortcodestyle";
addBlock(myclass);
}
if (target.getAttribute("data-command") === "neutrality") {
myclass = "neutrality shortcodestyle";
addBlock(myclass);
}
});
function addBlock(myclass)
{
var rangeElement = document.createElement("div");
rangeElement.setAttribute("class", myclass);
rangeElement.innerHTML = "<p><br></p>";
doc.body.append(rangeElement);
var range = edit1.document.createRange();
range.setStart(rangeElement.childNodes[0], 0);
range.collapse(true);
edit1.focus();
var sel = edit1.document.getSelection();
sel.removeAllRanges();
sel.addRange(range);
rangeElement.focus();
}
}
init();
//});
</script>
<p>
<input type="submit" value="Отправить" />
</p>
</form>
</body>
|
Сделала проверку, на нажимаемую клавишу enter в неё добавила также проверку, что курсор находится внутри контейнера div. При нажатии создается абзац, за пределами контейнера, но курсор почему-то не перескакивает. В чем проблема?
function test (e)
{
var key=e.keyCode || e.which;
if (key==13){
var range = edit1.document.createRange();
range.setStart(doc.childNodes[0], 0);
range.collapse(true);
edit1.focus();
var sel = edit1.document.getSelection();
if(sel.focusNode.parentElement.nodeName==="DIV")
{
var rangeElement = document.createElement("p");
doc.body.append(rangeElement);
var range = edit1.document.createRange();
range.setStart(rangeElement, 0);
range.collapse(true);
edit1.focus();
var sel = edit1.document.getSelection();
sel.removeAllRanges();
sel.addRange(range);
rangeElement.focus();
}
}
}
|
| Часовой пояс GMT +3, время: 13:27. |