Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Регулярное выражение (https://javascript.ru/forum/dom-window/68154-regulyarnoe-vyrazhenie.html)

ksa 29.03.2017 10:02

Цитата:

Сообщение от shyxeroks
Если в url нет get, то ошибка и загрузка останавливается

Как вариант...

var url='http://....../#page=reviews?id=2?&section=1?&status=5 ';
alert(getPrm('id',url))
alert(getPrm('section',url))
alert(getPrm('status',url))
alert(getPrm('test',url))
function getPrm(Name,Url){
	var reg=new RegExp(Name+'=[^?&]*');
	return reg.test(Url)? Url.match(reg).toString().split('=')[1]: '';
};

shyxeroks 29.03.2017 10:10

Благодарю, с регулярками разобрался. С contenteditable кареткой не все так просто оказалось :( . Возможно ли хотя бы вставить смайл в местоположение каретки, а не в самый конец?

ksa 29.03.2017 10:40

Цитата:

Сообщение от shyxeroks
Возможно ли хотя бы вставить смайл в местоположение каретки, а не в самый конец?

Может это поможет...
http://web-answers.ru/questions-and-...mesto-kursora/

Alexandroppolus 29.03.2017 12:16

https://jsfiddle.net/297wbkdj/

shyxeroks 29.03.2017 12:42

Alexandroppolus, работает, благодарю, но есть недочет, если див не в фокуса, а просто сразу вставляешь изображение, то вставляется вне div, и если div пустой, то первым смайл не ставится. Извиняюсь, а класс можно для img добавить? В консоле:
Uncaught TypeError: div.focus is not a function
at smile_add (smile.js:181)
at HTMLImageElement.onclick (VM20820 :1)

Вот посмотрите скрин:
http://joxi.ru/n2YYWbPco4D3k2

Alexandroppolus 29.03.2017 13:25

https://jsfiddle.net/5frtszko/
добавил класс для картинки
сделал проверку, что каретка (или выделенный кусок) строго внутри div

shyxeroks 29.03.2017 13:39

Alexandroppolus, благодарю. Жаль карму плюсануть больше не могу. Попробуйте без фокуса на div нажать input.

shyxeroks 29.03.2017 13:57

У меня что-то совсем бяда, не вставляются вообще:
<img src="/images/smile/<?=$i;?>.gif" class="smile_add" onclick="smile_add('reviews_text_edit','/images/smile/<?=$i;?>.gif');">
<div contenteditable="true" onFocus="text_edit_div('reviews_text_edit');exit_smile();" onblur="text_edit_div('reviews_text_edit');" class="reviews_text_edit">Введите текст...</div>


function smile_add(div, src) {
	var sel = window.getSelection();
  if (!sel || !sel.rangeCount) { return; }
  var r = sel.getRangeAt(0);
  if (!r) { return; }
  
  for (var n = r.commonAncestorContainer; n != div; n = n.parentNode) {
  	if (!n) { return; }
  }
  var img = new Image();
  img.className = 'my-img';
  img.src = src;
  r.deleteContents();
  r.insertNode(img);  
  r = document.createRange();
  r.selectNode(img);
  r.collapse(false);
  sel.removeAllRanges();
  sel.addRange(r);
  try {
  div.focus();
  } catch(exc) {}
}

shyxeroks 30.03.2017 11:09

Alexandroppolus, благодарю разобрался. Фокус сразу устанавливаю во время открытия окна со смайлами. Бывает маленько не четко работает, но это ерунда впринцепе (не всегда почему то в конец вставляется).

У меня еще вопрос по поводу регулярки, добавить нужно к этой функции. Перед вставкой, проверить количество вставленных уже в div смайлов, я думаю может просто посчитать количество тегов в div (img). К примеру если больше 10 штук, то открыть спрятанный div с предупреждающим текстом. Подскажите регулярку для подсчета, благодарю!

Alexandroppolus 30.03.2017 11:44

shyxeroks,

тут регулярки не нужны, просто смотри сколько картинок с таким классом внутри твоего редактируемого дива
div.querySelectorAll('img.my-img').length


ну и, разумеется, всё равно надо будет на сервере проверку сделать, если это критично.


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