Как вырезать часть из src
Всем привет) Ломаю голову над такой задачей: если src="http://img04.deviantart.net/2357/i/2011/201/c/8/vitrage.jpg" , то в переменную сохранить vitrage, если src="image/vitrage.jpg", то в переменную сохранить тоже vitrage. Подскажите, пожалуйста)
|
var a = src.split('/').pop() Либо substr с последней позиции "/". Если только имя без расширения, то удалить расширение. |
Цитата:
|
Решаю задачу дальше
Дальше по ходу решения своей задачи столкнулась со следующим http://codepen.io/AnnushkaV/pen/ZQELmL . Вырезала часть src. Эта часть src - это ID описания для соответствующей картинки. т.е. при клике на маленькую картинку рядом открывается большая ее версия. При наведении на большую картинку(блок справа), появляется описание для большой картинки. Описание появляется, но оно накапливается после каждого клика по маленькой картинке и наведения на большую. Как сделать что бы выводилось каждый раз только описание для выбранной картинки? Спасибо.
|
AnnushkaV,
а что означает накапливается? Я попробывал - вроде всё ок. |
mouseover заменить на mouseenter. Только зачем же так писать:
var bigImg = $(".films-descr"); bigImg.on('mouseover', function(){ var $this = $(bigImg); //а ведь уже кеширован объект в bigImg, причем $this далее не используется var str = $(this).closest('div#img-container').find('img').attr('src'); //и здесь тоже самое $(this) и есть bigImg var res = str.split("/").pop(); var res1 = res.split(".").shift(); $(this).find("#" + res1).show(); //опять ... |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
не знаю правильно ли... http://codepen.io/AnnushkaV/pen/ZQELmL
получается что раньше я только показывала каждое описание, но не прятала. теперь пытаюсь спрятать после того как убрался курсор. не срабатывает( |
додумалась. теперь все задуманное работает :dance:
поскажите, пожалуйста, как теперь навести порядок в коде? |
Цитата:
Можно конечно прятать/показывать нечто, то есть проверили создан ли объект с описанием, и если да, то показать, иначе сперва создать. Но ведь не факт, что пользователь будет кататься по элементам просматривая их описания по несколько раз, а значит и плодить объекты забивая ими документ не лучшее решение. .mouseenter() - создали объект с описанием и отобразили его. .mouseleave() - удалили созданный объект с описанием. И ничего плодится не будет. как теперь навести порядок в коде? var name, bigImg = $(".films-descr").on('mouseenter', function(){ var im = bigImg.closest('div#img-container') .find('img'); name = im.attr('src') .split("/") .pop() .split(".") .shift(); //здесь создавалась переменная mess- зачем, если не видно ее использования? //это создали объект и показали $("<h2>"+im.attr('title')+"</h2>").prependTo(bigImg.find("#" + name)).show(); }).on('mouseleave', function(){ //это сокращение, ибо name определили при заходе мышью на объект //но с учетом выше сказанного, здесь нужен не .hide() //а удаление ранее созданного объекта - remove() со всеми его потомками. bigImg.find("h2").empty() bigImg.find("#" + name).hide(); }); JQ всегда возвращает объект-источник, поэтому можно писать сразу: var name_var = $(selector).on(event, function() {...}) - и name_var = $(selector), или установить объекту обработчик, а кешировать его первый дочерний элемент, тогда: var name_var = $(selector).on(event, function() {...}).children().first() и $(selector) получит обработчик, а name_var = первый дочерний элемент $(selector). И поступать лучше именно так, не обращаясь к объектам по нескольку раз как вы это делаете тогда, когда он у вас уже есть в кеше. |
Цитата:
|
Часовой пояс GMT +3, время: 07:06. |