29.03.2017, 10:02
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от shyxeroks
|
Если в url нет get, то ошибка и загрузка останавливается
|
Как вариант...
var url='http://....../#page=reviews?id=2?§ion=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]: '';
};
|
|
29.03.2017, 10:10
|
|
Аспирант
|
|
Регистрация: 02.03.2017
Сообщений: 38
|
|
Благодарю, с регулярками разобрался. С contenteditable кареткой не все так просто оказалось . Возможно ли хотя бы вставить смайл в местоположение каретки, а не в самый конец?
|
|
29.03.2017, 12:16
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
|
|
29.03.2017, 12:42
|
|
Аспирант
|
|
Регистрация: 02.03.2017
Сообщений: 38
|
|
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
Последний раз редактировалось shyxeroks, 29.03.2017 в 12:48.
|
|
29.03.2017, 13:25
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
https://jsfiddle.net/5frtszko/
добавил класс для картинки
сделал проверку, что каретка (или выделенный кусок) строго внутри div
|
|
29.03.2017, 13:39
|
|
Аспирант
|
|
Регистрация: 02.03.2017
Сообщений: 38
|
|
Alexandroppolus, благодарю. Жаль карму плюсануть больше не могу. Попробуйте без фокуса на div нажать input.
|
|
29.03.2017, 13:57
|
|
Аспирант
|
|
Регистрация: 02.03.2017
Сообщений: 38
|
|
У меня что-то совсем бяда, не вставляются вообще:
<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) {}
}
|
|
30.03.2017, 11:09
|
|
Аспирант
|
|
Регистрация: 02.03.2017
Сообщений: 38
|
|
Alexandroppolus, благодарю разобрался. Фокус сразу устанавливаю во время открытия окна со смайлами. Бывает маленько не четко работает, но это ерунда впринцепе (не всегда почему то в конец вставляется).
У меня еще вопрос по поводу регулярки, добавить нужно к этой функции. Перед вставкой, проверить количество вставленных уже в div смайлов, я думаю может просто посчитать количество тегов в div (img). К примеру если больше 10 штук, то открыть спрятанный div с предупреждающим текстом. Подскажите регулярку для подсчета, благодарю!
Последний раз редактировалось shyxeroks, 30.03.2017 в 11:28.
|
|
30.03.2017, 11:44
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
shyxeroks,
тут регулярки не нужны, просто смотри сколько картинок с таким классом внутри твоего редактируемого дива
div.querySelectorAll('img.my-img').length
ну и, разумеется, всё равно надо будет на сервере проверку сделать, если это критично.
Последний раз редактировалось Alexandroppolus, 30.03.2017 в 11:46.
|
|
|
|