Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jquery保存在全局变量img属性位置_Javascript_Jquery_Html_Hover - Fatal编程技术网

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;   
        } 

     });
})