Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Функции срабатывают по несколько раз (https://javascript.ru/forum/jquery/71972-funkcii-srabatyvayut-po-neskolko-raz.html)

рони 09.01.2018 16:39

Samsam,
:-?
Цитата:

Написал функцию которая вставляет курсор после элемента,
вам же ссылку давали ...
https://habrahabr.ru/post/232965/

https://learn.javascript.ru/range-textrange-selection

https://habrahabr.ru/post/55922/

делать визуальный редактор сложно, за это редко кто берётся, ищите готовые решения

Samsam 11.01.2018 03:25

('body').on('input', '.textarea', function() {
var msg = $(this).html();

var selection = window.getSelection();
var range = selection.getRangeAt(0);


//Ищи Img и меняю если это смайл

var a = msg.replace(/<img[^>]+>/g, function(i) { 
	var tag = i.match(/src="([^"]+)"/)[1];
	if (tag == 'http://domen.ru/smiles/1.png') return ':)' ;
        if (tag == 'http://domen.ru/smiles/2.png') return ':(' ;
......

else return '' ;
});  


//Потом удаляю все теги 
var b = a.replace(/<[^>]*?>/g , '');

//Обратно меняю символы на img через функцию
var d = vozvratIMG(b);


// И вывожу
$(this).html(d);

//Удаляю все range
selection.removeAllRanges();
//выставляю новый
selection.addRange(range);   
});


Каретка возвращается но только до того момента как я поставлю смайл. После этого при каждом нажатие каретку сбрасывает в начало. А если удалить selection.removeAllRanges(); то каретка будет возвращатсяс к предыдущему смайлу. Как я понимаю он не может запомнить range. Как мне быть ? подскажите .

Samsam 11.01.2018 17:25

рони, Подскажите почему не сохраняется range ?

рони 11.01.2018 17:42

Samsam,
не могу помочь

Samsam 16.01.2018 20:49

рони, Подскажите как убрать лишние пробелы в начале и в конце строки
Вариант replace(/^\s+|\s+$/g, ''); или trim() не работают c contenteditable

j0hnik 16.01.2018 23:31

var str = ' blabla bla ';
while(str[0]== ' ') str = str.slice(1);
while(str[str.length-1]==' ') str = str.slice(0, str.length-1);
console.log(str);

рони 17.01.2018 01:11

Цитата:

Сообщение от Samsam
Вариант replace(/^\s+|\s+$/g, '');

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
$('.editor').html(function(i ,html) {
   return html.replace(/&nbsp;/g, '').replace(/^\s+|\s+$/g, '')
})

});
  </script>
</head>

<body>
<div class="editor" contenteditable="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;test &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>

</body>
</html>

Samsam 17.01.2018 03:07

Спс. рони, После того как прочитал ваш ответ и до самого дошло =)
Сейчас продолжаю разбираться с wysiwyg действительно объёмная тема. Но посмотрим что выйдет. Ещё хотел спросить у вас совет. по поводу динамического вывода новых записей из бд (сообщений, комментарий, уведомлений) . Что логично использовать в этих случаях что бы сервер меньше нагружался ?

рони 17.01.2018 03:28

Samsam,
задайте свой вопрос по серверу тут https://javascript.ru/forum/server/ или дождитесь специалиста

Samsam 08.02.2018 00:07

Здравствуйте рони, подскажите каким образом можно узнать в какой тег обвёрнут выделенный текст window.getSelection().

Нужно для того что бы при первом нажатие текст оборачивался в определённый тег . При повторном нажатие скрипт проверял на наличие этого тега и если он есть удалял его. Спасибо

рони 08.02.2018 00:36

Цитата:

Сообщение от Samsam
подскажите каким образом можно узнать в какой тег обвёрнут выделенный текст window.getSelection().

не знаю, может обёрнут, может нет, может только часть обёрнута.
Цитата:

Сообщение от Samsam
Нужно для того что бы при первом нажатие текст оборачивался в определённый тег . При повторном нажатие скрипт проверял на наличие этого тега и если он есть удалял его

во что обернули, то и удаляйте.


Часовой пояс GMT +3, время: 11:26.