Alexandroppolus, я сделал так:
////// открыть div со смайлами function open_smile(div){ if($('.smile_block').css('display') == 'none'){ $('.'+div).focus(); $('.smile_block').fadeIn(500); $('.smile').css('opacity','1'); } } //// вставить смайл function smile_add(div, src){ var block = document.querySelector(div); var test = div.querySelectorAll('img.smile_add_block').length; alert(test) var sel = window.getSelection(); if (!sel || !sel.rangeCount) { return; } var r = sel.getRangeAt(0); if (!r) { return; } for (var n = r.commonAncestorContainer; n != block; n = n.parentNode) { if (!n) { return; } } var img = new Image(); img.className = 'smile_add_block'; img.src = src; r.deleteContents(); r.insertNode(img); r = document.createRange(); r.selectNode(img); r.collapse(false); sel.removeAllRanges(); sel.addRange(r); try { block.focus(); }catch(exc){} } В консоли ругается на querySelectorAll. Еще такой вопрос, querySelector ищет на странице только один элемент, а querySelectorAll все элементы на странице, то бишь это div переданный в функцию, правильно? С php проблем нет, js на стадии изучения, благодарю) У нас же уже есть переменная var block = document.querySelector(div); Может block использовать просто нужно? |
https://jsfiddle.net/5nn9t4j6/
Цитата:
у тебя есть див. Собери по нему картинки, посмотри количество. Больше ничего не надо квериСелектить. |
Alexandroppolus, не знаю почему, но консоль ругается на querySelectorAll. Вот весь код:
<div class="smile_block"> <span class="smile_close" onclick="exit_smile();">X</span> <?for($i=1;$i<=48;$i++){?> <img src="/images/smile/<?=$i;?>.gif" class="smile_add" onclick="smile_add('<?=$smile_pages_info;?>','/images/smile/<?=$i;?>.gif');"> <?}unset($i);?> <div class="smile_error">Не больше 3-ех в одной записи/письме/сообщении.</div> </div> ////// открыть блок со смайлами function open_smile(div){ if($('.smile_block').css('display') == 'none'){ $('.'+div).focus(); $('.smile_block').fadeIn(500); $('.smile').css('opacity','1'); } } ////// закрыть блок со смайлами function exit_smile(){ if($('.smile_block').css('display') == 'block'){ $('.smile_block').fadeOut(500); $('.smile').css('opacity',''); } } ///// вставить смайл function smile_add(div,src) { if (div.querySelectorAll('img.smile_add_block').length > 3) { $('.smile_error.').fadeIn(500); $('.smile_error').delay(3000).fadeOut(500); try { div.focus(); } catch(exc) {} return; } 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 = 'smile_add_block'; 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) {} } По-моему я запутался уже :help: В консоле ошибка: Uncaught TypeError: Cannot read property 'querySelectorAll' of null at smile_add (smile.js:64) at HTMLImageElement.onclick (VM43380 :1) |
Все разобрался. Вопрос снят. Благодарю!!!
|
Часовой пояс GMT +3, время: 11:19. |