#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
Эй, ребята, у меня есть следующий код. По сути, это скрипт галереи, и когда я наведу курсор мыши на эскиз, он изменит увеличенную версию эскиза:
$.fn.CloudZoom = function (options) {
try {
document.execCommand("BackgroundImageCache", false, true);
} catch (e) {}
this.each(function () {
var relOpts, opts;
eval('var a = {' $(this).attr('rel') '}');
relOpts = a;
if ($(this).is('.image')) {
$(this).css({
'position': 'relative',
'display': 'block'
});
$('img', $(this)).css({
'display': 'block'
});
if ($(this).parent().attr('id') != 'imageBox') {
$(this).wrap('<div id="imageBox"></div>');
}
opts = $.extend({}, $.fn.CloudZoom.defaults, options);
opts = $.extend({}, opts, relOpts);
$(this).data('zoom', new CloudZoom($(this), opts));
} else if ($(this).is('.thumbs')) {
opts = $.extend({}, relOpts, options);
$(this).data('relOpts', opts);
$(this).bind('mouseenter click', $(this), function (event) {
var data = event.data.data('relOpts');
$('#' 'mainImage').data('zoom').destroy();
$('#' 'mainImage').attr('href', event.data.attr('href'));
// Change the small image to point to the new small image.
$('#' 'mainImage' ' img').attr('src', data.thumby);
$('#' 'mainImage').CloudZoom();
return false;
});
}
});
return this;
};
HTML-код выглядит следующим образом:
<li>
<a href="gfx/boss_black.jpg" class="thumbs" rel="thumby:'gfx/boss_black.jpg'">
<img src="gfx/boss-black-small.jpg">
</a>
</li>
Что я хочу сделать, так это написать rel=""
тег без «большого пальца».
Я хочу, чтобы тег rel выглядел следующим образом:
rel="gfx/boss_black.jpg"
Когда я делаю это, JS больше не работает. Как мне изменить JS, чтобы просто получить «rel»?
Комментарии:
1. Покажите нам также JS, без него мы понятия не имеем.
2. Ага. Пожалуйста, не используйте атрибут rel как «Атрибут, в котором я могу хранить произвольные данные», у него есть определенное назначение!
3. Возможно, вы захотите использовать атрибуты data-* вместо rel, rel предназначены для отношений, xfn и т.д.
4. хорошо, я отредактировал сообщение, чтобы включить js
Ответ №1:
var img = $('#' 'mainImage' ' img'),
rel = img.parent().attr('rel'),
thumby = rel.substr(8, rel.length - 9);
img.attr('src', thumby);
Я бы рекомендовал сохранить альтернативный src
атрибут в атрибуте, отличном от rel
хотя. Атрибут данных HTML5 был бы хорошим кандидатом.
Кроме того, это странный селектор 🙂
Ответ №2:
Если я правильно понимаю — существует библиотека под названием thumby, которая требует специального формата для вашего тега rel, который вы не хотите использовать в своем исходном коде.
Я вижу два возможных варианта.
-
Попробуйте выполнить javascript, который изменяет тег rel, до того, как будет включена библиотека thumby. Javascript загружается и выполняется в порядке, указанном в вашем HTML-документе. Надеюсь, thumby подберет измененное значение, но исходный html содержит старое значение.
-
Измените библиотеку thumby — в частности, ту часть, которая считывается из rel, и, возможно, заставьте ее определять, где работать, на основе класса thumbs вместо этого.
Комментарии:
1. нет, библиотеки с именем thumby не существует … thumby назывался «smallImage» в оригинальном скрипте галереи, но я изменил его на thumby, потому что я не хочу слишком сильно загромождать тег rel»»
Ответ №3:
Что-то вроде:
<li>
<a href="gfx/boss_black.jpg" class="thumbs">
<img src="gfx/boss-black-small.jpg" rel="gfx/boss_black.jpg">
</a>
</li>
…
$('.thumbs img').hover(
function () {
var r = $(this).attr('rel'), a = $(this).attr('src');
$(this).attr({'rel':a,'src':r});
},
function () {
var r = $(this).attr('rel'), a = $(this).attr('src');
$(this).attr({'rel':a,'src':r});
}
);