Javascript 使用jquery保存在全局变量img属性位置
我有以下几个部分:Javascript 使用jquery保存在全局变量img属性位置,javascript,jquery,html,hover,Javascript,Jquery,Html,Hover,我有以下几个部分: <section class="one"> <div class="two over" element="myelement1"> <div class="front" > <img src="element.jpg" width ="100%;" height ="100%;" alt=""> </div> <di
<section class="one">
<div class="two over" element="myelement1">
<div class="front" >
<img src="element.jpg" width ="100%;" height ="100%;" alt="">
</div>
<div class="back">
</div>
</div>
</section>
<section class="one ">
<div class="two over" element="myelement2">
<div class="front" >
<img src="element2.jpg" width ="100%;" height ="100%;" alt="">
</div>
<div class="back">
</div>
</div>
</section>
如何存储全局变量或字典
每个
img=$(this.find('img')的值
所以我只做一次,而不是每次用户都在中。悬停?首先,您可能不需要解决您试图解决的问题。现代计算机速度如此之快,以至于搜索一个对象的子对象以查找IMG是一个非常快速的操作(除非可能有数千个)。所以,您可能根本不应该尝试优化它,除非您有实际的性能数据表明这里确实存在问题
在优化之前,始终进行测量,以了解实际存在哪些问题以及实际需要解决哪些问题。然后,测量任何潜在的解决方案,看看它是否真的在做你需要的事情
至于你问的实际问题,有两种选择
您可以第一次检索它,然后将其保存在全局文件中:
var i = j =0;
var imgs1, imgs2;
$(function () {
$('.over').hover(function () {
/*do something*/
}, function () {
if ( $(this).attr('element') == 'myelement1'){
if (!imgs1) {
imgs1 = $(this).find('img');
}
imgs1.attr('src', arr_1[i]);
i++;
if(i > arr_1.length-1) i=0;
}
else if ( $(this).attr('element') == 'myelement2'){
if (!imgs2) {
imgs2 = $(this).find('img');
}
imgs2.attr('src', arr_2[j]);
j++;
if(j > arr_2.length-1) j=0;
}
});
})
或者,本着jQuery的精神,使用.data()
而不是globals:
var i = j =0;
$(function () {
$('.over').hover(function () {
/*do something*/
}, function () {
var imgs = $(this).data("imgList");
if (imgs) {
imgs = $(this).find('img');
$(this).data("imgList", imgs);
}
if ( $(this).attr('element') == 'myelement1'){
imgs.attr('src', arr_1[i]);
i++;
if(i > arr_1.length-1) i=0;
}
else if ( $(this).attr('element') == 'myelement2'){
imgs.attr('src', arr_2[j]);
j++;
if(j > arr_2.length-1) j=0;
}
});
})
html代码中的.over
在哪里?哦,很抱歉我更新了代码,它在
中,但是我在哪里做img=$(这个)。查找('img')代码>,如何分配搜索结果的值?@cMinor-我有两个代码示例来说明如何进行搜索。第一个将图像列表保存在全局视图中。第二个将其保存在.data()
引用中。请就其中一个代码示例问一个更具体的问题代码>在第二个代码上?@cMinor,我建议你读一下。其基本思想是,它允许您存储与特定DOM对象相关联的javascript数据(并且它以一种安全的方式进行存储,不会像其他方式那样导致内存泄漏)。因此,我们使用它作为每个单独的.hover
对象的图像列表的缓存。如果缓存有一个值,我们使用它而不是重新填充它们。如果没有,我们将获得图像列表,然后将其存储起来,以备下次使用。如果您定义var imgs
ourside函数,会发生什么情况,这会算作全局变量吗?
var i = j =0;
$(function () {
$('.over').hover(function () {
/*do something*/
}, function () {
var imgs = $(this).data("imgList");
if (imgs) {
imgs = $(this).find('img');
$(this).data("imgList", imgs);
}
if ( $(this).attr('element') == 'myelement1'){
imgs.attr('src', arr_1[i]);
i++;
if(i > arr_1.length-1) i=0;
}
else if ( $(this).attr('element') == 'myelement2'){
imgs.attr('src', arr_2[j]);
j++;
if(j > arr_2.length-1) j=0;
}
});
})