Таким образом, у меня есть сценарий, когда вы наведите указатель на div, он загрузит файл.html в другой div. Я хочу, чтобы этот скрипт работал со многими div. Я не хочу писать отдельный сценарий для каждого изображения, вместо этого использую переменную, которая основывается на имени div. Скажем, у меня есть div с именем p3, и когда я наводил указатель мыши, я хочу, чтобы скрипт загружал p3.html. Здесь сценарий, чтобы показать вам, что я имею в виду:
<script type="text/javascript">
$(document).ready(function () {
$('#p1').mouseenter(function () {
$('#description').load('descr/p1.htm');
});
$('#p1').mouseleave(function () {
$('#description').load('descr/portDefault.htm');
});
});
Любой совет будет оценен.
Я думаю, это зависит от того, как генерируются div. То, что я сделал бы, это установить атрибут на div для обозначения целевой страницы htm.
Что-то вроде
<div data-targetPage='p1.htm' class='hoverImage'>stuff</div>
Тогда jquery может выглядеть так
$(document).ready(function () {
$('.hoverImage').mouseenter(function () {
$('#description').load($(this).attr('data-targetPage'));
});
$('.hoverImage').mouseleave(function () {
$('#description').load('descr/portDefault.htm');
});
});
Изменение: обновлено, чтобы отразить все комментарии.
[data-*]
. Вместо [targetPage]
(который недопустим) вы должны использовать [data-target-page]
, к которому вы можете получить доступ с помощью $(..).data('targetPage');
,
Вы можете добавить общий класс ко всем изображениям и сделать это следующим образом:
$document).ready(function () {
$('.class').mouseenter(function () {
var id = this.id;
$('#description').load('descr/' + id + '.htm');
});
$('.class').mouseleave(function () {
$('#description').load('descr/portDefault.htm');
});
Подобно тому, что сказал matweka, я бы добавил класс ко всем изображениям, которые вы хотите разрешить, и просто добавьте this.attr('id'), чтобы выбрать p1, p2 и т.д.
$(document).ready(function() {
$('.clickImg').mouseenter(function() {
$('#description').load('descr/' + this.attr('id') + '.htm');
});
$('.clickImg').mouseleave(function() {
$('#description').load('descr/portDefault.htm');
});
});
Кроме того, я бы рекомендовал использовать.hover() вместо mouseenter и mouseleave
например:
$(document).ready(function() {
$('.clickImg').hover(function() {
$('#description').load('descr/' + this.attr('id') + '.htm');
}, function() {
$('#description').load('descr/portDefault.htm');
});
});
Вы хотите использовать объекты? Потому что вы говорите, что не хотите писать код снова и снова. Вот как вы могли бы сделать один (взятый из объектов создания jQuery):
var box = {}; // my object
var boxes = []; // my array
$('div.test').each(function (index, value) {
color = $('p', this).attr('color');
box = {
_color: color // being _color a property of 'box'
}
boxes.push(box);
});
Надеюсь, это то, что вы ищете.
Одна хорошая вещь, которую вы можете сделать, это использовать атрибуты данных на ваших изображениях, например:
<img class="images" src="bleh.jpg" data-imagename="image_bleh.jpg" />
и внутри вашего javascript вы делаете:
$('.images').mounseenter(function(){
$('#description').load('desc/'+$(this).data('imagename'));
});
сообщите мне, понимаете ли вы это.
Попробуй это:
$(document).ready(function() {
$('img').mouseenter(function() {
$('#description').load('descr/' + this.src.replace('\.png', '') + '.htm');
});
$('img').mouseleave(function () {
$('#description').load('descr/portDefault.htm');
});
});
Тем не менее, я бы рекомендовал добавить некоторый класс ко всем изображениям, к которым вы хотите обратиться, например
<img class="clickableImage" src="...">
и выберите их с помощью jQuery следующим образом:
$('.clickableImage').mouseenter(...