Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal

Цитата:
Как я понял так как картинка ещё не на странице, а в буфере - то браузер её и не грузит...

если через Image(), то грузит. но нужно проверять когда она загружена, так как выполнение скрипта при этом продолжается асинхронно.
например старинным способом - http://stackoverflow.com/questions/3511200/new-image-how-to-know-if-image-100-loaded-or-not
 
VVL99
и?

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 09:00 06-03-2017 | Исправлено: Mavrikii, 09:02 06-03-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Упомянутый выше autolink прекрасно работает с одной ссылкой. Как его заставить работать с текстом, содержащем ссылки?  
счас там код такой(ненужное убираю)

Код:
    var validUrlRegex = /^(https?|ftp):\/\/(-\.)?([^\s\/?\.#-]+\.?)+(\/[^\s]*)?[^\s\.,]$/ig,
        doubleQuoteRegex = /"/g;
 
data = data.replace( validUrlRegex , '<a href="' + data.replace( doubleQuoteRegex, '%22' ) + '">$&</a>' );
 

Где тут подправить, чтобы проверялся, что не весь буфер это одна ссылка, а буфер проверялся на ссылки и менялись там они?  

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 09:00 06-03-2017 | Исправлено: xerpal, 09:04 06-03-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
счас там код такой

тема для регулярок указана ранее.
заменить ^ на (^|\b) и аналогично $ на ($|\b)
там могут быть небольшие проблемы если ссылка на нескольких строчках с переносом

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 09:05 06-03-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
заменить ^ на (^|\b) и аналогично $ на ($|\b)

 
Тут у нас 4 "птички" ^  и два доллара $
Менять все что ли так?  
 

Цитата:
тема для регулярок указана ранее.

тут же именно яваскрипт специфика все таки
 

Цитата:
если через Image(), то грузит. но нужно проверять когда она загружена

ну так у нас плагин же к редактору - пока он не отработает, ничего не вставляет. В общем тут пока не важно, текст проверить вот на ссылки и картинки важнее...

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 09:09 06-03-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal

Цитата:
Менять все что ли так?  

а почему не попробовать сначала?
 

Цитата:
пока он не отработает, ничего не вставляет

картинка грузится сразу, как указан .src
но в зависимости от связи и размера - нужно какое то время.
будут доступны размеры, без отображения ее самой
https://jsfiddle.net/o2vusL03/
 

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 09:14 06-03-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
а почему не попробовать сначала?

заменил всё - не работает. 4 "птички" ^  и два доллара $
Включая доллар внизу...
вышло так  

Код:
    var validUrlRegex = /(^|\b)(https?|ftp):\/\/(-\.)?([(^|\b)\s\/?\.#-]+\.?)+(\/[(^|\b)\s]*)?[(^|\b)\s\.,]($|\b)/ig,
        doubleQuoteRegex = /"/g;
 
data = data.replace( validUrlRegex , '<a href="' + data.replace( doubleQuoteRegex, '%22' ) + '">($|\b)&</a>' );
 

Не работает...
 

Цитата:
картинка грузится сразу, как указан .src

Нет, не грузится в данном случае. Видимо какие то тонкости с ckEditor и буфером
 

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 09:23 06-03-2017 | Исправлено: xerpal, 18:48 06-03-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal
https://jsfiddle.net/c2qh0nmm/

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 19:40 06-03-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо. Только из-за лежания форума весь день пришлось такие сделать все через массив и сплит, притом думаю очень неэффективно и через одно место. Но работает и даже картинки зато вставляет когда надо, а когда надо ссылки.  
Вот так вышло

Код:
 
var validUrlRegex = /^(https?):(.*)\/(.*)\.(gif|jpg|png|jpeg)(.*)$/ig,
        doubleQuoteRegex = /"/g;
var validUrlRegex2 = /^(https?|ftp):\/\/(-\.)?([^\s\/?\.#-]+\.?)+(\/[^\s]*)?[^\s\.,]$/ig,
    doubleQuoteRegex2 = /"/g;
 
                 var data = evt.data.dataValue;      
 
                 var data_arr = data.split( "\n" ).join( " " ).split( " " );//split(/\s/);
                 var index, temp,data_str;
                 var new_arr = [];
                 var new_str = '';
                 for (index = 0; index < data_arr.length; ++index) {
                     data_str =data_arr[index];
                     data_str=data_str.replace(/\&nbsp;/g, '');
                     temp= data_str.replace( validUrlRegex , '<img src="' + data_str.replace( doubleQuoteRegex, '%22' ) + '" >' );
                     if ( temp == data_str ) {
                         temp= data_str.replace( validUrlRegex2 , '<a href="' + data_str.replace( doubleQuoteRegex2, '%22' ) + '">$&</a>' );
                     }
                     new_str +=' '+temp;      
                 }
 
evt.data.dataValue = new_str;
 

(Лишнее убрано). Все работает, хоть и некрасиво и не эффективно

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 21:51 06-03-2017 | Исправлено: xerpal, 21:53 06-03-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal

Цитата:
притом думаю очень неэффективно и через одно место

https://jsfiddle.net/c2qh0nmm/1/
 
ps: indexOf не работает в IE ниже 9
и будет ошибочно работать с картинками, если в хэше или get аргументах будет что то с точкой.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:02 06-03-2017 | Исправлено: Mavrikii, 22:23 06-03-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Картинки могут быть со всяким мусором после расширения. Если есть мусор ( image.jpg?rt=rr )- то не работает, заменяет на ссылку ((
 
 
Добавлено:
Opera presto почему то вообще глючит( притом изначально, не после последнего) - там у картинок она ссылку все равно в конец ставит...
НО это меньшее из зол - на ней не проверяется обычно...

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 22:21 06-03-2017 | Исправлено: xerpal, 22:33 06-03-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal

Цитата:
Если есть мусор ( image.jpg?rt=rr )- то не работает, заменяет на ссылку

потому что кусок определяющий расширение рассчитан на "чистые" файлы.
элементарно правится
https://jsfiddle.net/c2qh0nmm/2/
ps: и тут, если хочется, чтобы работало с расширениями с прописными буквами - нужно ext[1].toLowerCase()

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:46 06-03-2017 | Исправлено: Mavrikii, 22:50 06-03-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
элементарно правится

Не так уж и элементарно, учитывая  

Код:
 var ext = match.match(/\.([0-9a-z]+)(?:[\?#]|$)/i);

 
Спасибо, все вроде ок. )

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 23:09 06-03-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal

Цитата:
Не так уж и элементарно, учитывая  

все это элементарно, если понимать регулярки.
можно сделать и без них, но код будет длиннее и менее опрятный.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 23:10 06-03-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Переносы убивают скрипт. Если копируемая строка в несколько строчек - то не работает...
PS Там проблема оказалась не в JS и не в регулярке - тег BR гадил...

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 09:43 07-03-2017 | Исправлено: xerpal, 10:08 07-03-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal

Цитата:
Переносы убивают скрипт


Цитата:
там могут быть небольшие проблемы если ссылка на нескольких строчках с переносом

заменить точку (не экранированную) на [\s\S]

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 09:48 07-03-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прикольно, если копировать из word и иже с ними - то ссылки остаются ссылками, в картинки не преобразуются. Видимо какие то заморочки с буфером в винде
 
Добавлено:

Код:
/(^|\b)(https?|ftp):\/\/(-\.)?([^\s\/?\.#-]+\.?)+(\/[^\s]*)?[^\s\.,]($|\b)/ig

 
Здесь же 4 точки и все экранированные....
Или же со слешем ведущим называются НЕэкранированные и все 4 менять?

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 10:15 07-03-2017 | Исправлено: xerpal, 10:23 07-03-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal

Цитата:
Здесь же 4 точки и все экранированные....  

ну не смотрел регулярку, написал как обычно )
в данном случае
Цитата:
^\s

внутри [] определяет "все, что не пробел, перенос и так далее"
нужно явно добавить, что то такого вида (не проверял)
/(^|\b)(https?|ftp):\/\/(-\.)?(([^\s\/?\.#-]|\r?\n)+\.?)+(\/([^\s]|\r?\n)*)?[^\s\.,]($|\b)/ig
 
и изучайте регулярки, ну что я, буду все писать?

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 10:31 07-03-2017 | Исправлено: Mavrikii, 10:33 07-03-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Да я базовые основы знаю, просто их же несколько видов регулярок и черт ногу сломишь...
Спасибо ещё раз

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 10:36 07-03-2017
usrZorg

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые гуру.
Прошу вашей помощи.
Помогите вытянуть наружу возврат функции:
(нижеприведенный код преобразовывает адреса в географические координаты)
код сабжа
Ссылка на jsfiddle.net
 

Всего записей: 38 | Зарегистр. 11-06-2010 | Отправлено: 21:30 23-03-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
usrZorg
выполнение функции после получения координат идет асинхронно, поэтому вернуть сразу (без задержки выполнения остального кода и подвисания браузера) не получится, так как запрос к гуглю и получение ответа занимают какое то время.
можно сделать, к примеру, так
https://jsfiddle.net/zpnh61b7/1/

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:39 23-03-2017 | Исправлено: Mavrikii, 21:40 23-03-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru