События при фокусе на элементе с contenteditable
Привет, есть элемент:
<div class="editor" contenteditable="true" placeholder="Начните писать..."></div> Как при фокусе создать параграф и переместить фокус на него? Делаю что-то вроде этого:
editor.addEventListener( 'focus', function() {
if( editor.innerHTML == '' ) {
editor.innerHTML = '<p></p>';
}
} );
Но фокусировка всё равно перед тегом p. |
Янковиц,
const editor = document.querySelector('.editor');
editor.addEventListener( 'focus', function() {
if( editor.innerHTML == '' ) {
editor.innerHTML = '<p></p>';
editor.querySelector('p').focus()
}
} );
|
Спасибо, я наверно не так выразился. Скорее нужно не фокус, а курсор перенести.
|
Цитата:
Попробуйте так
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" lang="ru">
<meta name="viewport" content="width=device-width, initial-scale=1.0" >
<title>TEST</title>
<style>
.editor {
width: 300px;
min-height: 100px;
border: 1px solid blue;
}
</style>
</head>
<body >
<div class="editor" contenteditable="true" placeholder="Начните писать..."></div>
<script>
let editor = document.querySelector('.editor')
editor.addEventListener( 'focus', function() {
if( editor.children.length == 0 ) {
editor.innerHTML = '<p style="min-height:10px;margin-left:3px;"></p>';
editor.querySelector('p').focus()
}
} );
</script>
</body>
</html>
|
Спасибо, действительно. Неожиданное поведение.
|
Янковиц,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
div[contenteditable] > p{
border: 1px solid red;
min-height: 1em;
background-color: #FFFFFF;
margin: 4px 2px;
}
div[contenteditable]:focus {
outline: none;
}
div[contenteditable]{
background-color: #CCCCFF;
padding: 1px 4px;
}
div[contenteditable]:empty:before {
content:attr(placeholder);
color:gray
}
</style>
</head>
<body>
<div class="editor" contenteditable="true" placeholder="Кликните и начните писать..."></div>
<script>
const editor = document.querySelector('.editor');
editor.addEventListener( 'focus', function() {
if( editor.innerHTML == '' ) {
editor.innerHTML = '<p></p>';
editor.querySelector('p').focus()
}
} );
</script>
</body>
</html>
|
Цитата:
Попробуйте нажимать enter при вводе. Каждая строка будет оформляться в виде отдельного параграфа внутри div. Не <br> ставит внутри <p>, а новый <p> создает. |
| Часовой пояс GMT +3, время: 02:58. |