Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как узнать папку, с которой загрузилась картинка? (https://javascript.ru/forum/dom-window/27344-kak-uznat-papku-s-kotorojj-zagruzilas-kartinka.html)

Le-mark43 10.04.2012 10:52

Как узнать папку, с которой загрузилась картинка?
 
Привет всем!
не знаю, отвечаете ли вы по Jquery, ведь сайт по javascript, но все же...
есть простой скрипт:

$('a.menu').hover(
function() { //при наведении курсора:
id = $(this).attr('id');
num = id.replace(/menu(\d+)/gi, '$1'); //выделяем порядковый номер меню
$('#img'+num).attr('src', 'img/menu/'+num+'.png');
},

function() { //при уходе курсора с области реагирования hover:
id = $(this).attr('id');
num = id.replace(/menu(\d+)/gi, '$1');
if ($(this).hasClass('site_active')) return false; //если объекту соответствует класс 'site_active', обратно картинку не меняем.
$('#img'+num).attr('src', 'img/menu/menu'+num+'.png'); //возвращаем предыдущую картинку
}
);

суть:
у каждого объекта меню есть пара картинок:
например: menu1.png - по дефолту и
1.png - для события hover

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

Вопрос:
как автоматически вычислять вот эту вот часть: " 'img/menu/ " ?
то есть, мне надо, шобэ скрипт мог сам узнать из какой папки загрузилась картинка?
Смысл:
как многие наверное знают Осел 6 не отрабатывает события OnMouseOver и OnMouseOut для тега <img>. скрипт обходит эту ошибку, но на сайте достаточно картинок, которые меняются по наведению, расположены в разных папках (в зависимости от принадлежности), и имеют соответственно разные классы для ссылок, не только class='menu' (а.menu).
хоцца:
менять все картинки ОДНИМ скриптом.
заранее спасибо!

Pavel M. 10.04.2012 12:45

Цитата:

Сообщение от Le-mark43
не знаю, отвечаете ли вы по Jquery, ведь сайт по javascript, но все же...

jquery уже не javascript ?

Цитата:

Сообщение от Le-mark43
как автоматически вычислять вот эту вот часть: " 'img/menu/ " ?

сделайте $('#img'+num).attr('src'); - получите адрес картинки

Викториан 10.04.2012 14:04

Цитата:

сделайте $('#img'+num).attr('src'); - получите адрес картинки
А потом делай split по символу '/' и выделяй папки)

Викториан 10.04.2012 14:05

Чуть не забыл - последний элемент в полученном массиве будет названием изображения (с расширением).

Le-mark43 10.04.2012 15:38

Народ, спасибо!
блин, так все просто....

Le-mark43 10.04.2012 21:35

ребят, вообщем наваял я нечто вот такое:

$('img[id]').hover(function(){ //ну или $('img[class]')

src=$(this).attr('src');
srcArray=src.split('/');
nameArray=srcArray[srcArray.length-1].split('.');
name=nameArray[0];
type=nameArray[1];
dir='';
for (i = 0; i < srcArray.length-1; i++){
dir = dir+srcArray[i]+'/';
}
$(this).attr('src', dir+name+'_hover.'+type);


}, function() {
src=$(this).attr('src');
srcArray=src.split('/');
nameArray=srcArray[srcArray.length-1].split('.');
name=nameArray[0];
type=nameArray[1];
dir='';
for (i = 0; i < srcArray.length-1; i++){
dir = dir+srcArray[i]+'/';
}
name = name.replace(/_hover/gi, '');
$(this).attr('src', dir+name+'.'+type);

}
);

обязательная пара картинок:
дефаулт: картинка.тип (ну там jpg,gif пох как)
hover: картинка_hover.тип

вроде все норм, но есть ощущение, что процедуру можно как то проще сделать...
может есть идеи?

Викториан 10.04.2012 22:37

Если есть ощущение, то должны быть и идеи)

Викториан 11.04.2012 09:38

В плане оптимизации я не особо силен, но тут умных людей много, наверняка помогут)

Pavel M. 11.04.2012 10:38

Le-mark43,
как-то у вас сложно получается
если я правильно понял то у вас src примерно такая строка 'img/menu/picture.gif'
а при наведении мыши 'img/menu/picture_hover.gif'

может быть просто при наведении получаем src картинки
и делаем замену src.replace('.', '_hover.')

а при уходе мыши
получаем src и делаем замену src.replace('_hover.', '.')

??

Le-mark43 14.04.2012 22:18

)))))))))))))
серьезно, так значительно проще!!!
ну чо... будем учится мыслить попростецки!
Спасибо!
кстати, при таком варианте точку в имя файла уже не вставишь, ну будем надеяться, что никто картинку с таким именем не подсунет...


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