2013-07-12 36 views
1

只是想问一个更好的方式来跟踪jQuery中的父路径,目前我这样做。在父母路径作为jquery变量

$('.qBox em a').hover(
    function(){ 
     $(this).parent().parent().find('.overlayIMG').fadeIn(100); 
    }, 
    function(){ 
     $(this).parent().parent().find('.overlayIMG').fadeOut(100); 
    } 
); 

但我想这样做(下面的代码不起作用,因为某些原因,我不知道)。我不知道如何正确搜索这个问题,我已经尝试跟踪父母和父母的路径,但无法找到答案,所以我暂时打扰你。

$('.qBox em a').hover(
    var biggerImage = $(this).parent().parent().find('.overlayIMG'); 
    function(){ 
     biggerImage.fadeIn(100); 
    }, 
    function(){ 
     biggerImage.fadeOut(100); 
    } 
); 

这是HTML标记

<div class="qBox"> 
    <em> 
      <img src="images/homepagethumbOL.png" class="overlayedIcon"> 
      <a href="#"><img src="images/sample_box.jpg"></a> 
    </em> 
    <span> 
     <h3><a href="#">Article Title Looks Like This or Longer</a></h3> 
     <p>Curabitur zblandit tempus porttitor. Donec ullamcorper.</p> 
     <a href="#">view <i>45</i> comments</a> 
     </span> 
    <img src="images/sampleBig.jpg" class="overlayIMG one"> 
</div> 
+0

请您分享的HTML标记,使我们可以建议一些 –

+0

你的第二个选择是语法不正确 –

+0

是啊,这是我的问题。我不知道做到这一点的正确方法。 :) – janharold

回答

3

您可以使用each()遍历元素,并找到.overlayIMG只有一次:

$('.qBox em a').each(function(){ 
    var overlay = $(this).parent().parent().find('.overlayIMG'); 

    $(this).hover(
     function(){ 
      $(overlay).fadeIn(100); 
     }, 
     function(){ 
      $(overlay).fadeOut(100); 
     } 
    ); 
}); 
+0

这就像一个魅力,我一直在使用旧的方法相当长一段时间,我真的觉得它不干净。所以我决定在这里问一下。多谢你们!欣赏你的答案! – janharold

0

你不能在你已经做了的地方声明一个变量 - 这是不正确语法。但是,如果您将其声明在悬停范围之外,则无法使用this关键字。

你可以使用jQuery的data()功能:

$('.qBox em a').hover(
function() 
{ 
    var data = $(this).data(this, "data"); 
    if (data.img == undefined) 
    { 
     data = { img: $(this).parent().parent().find('.overlayIMG') }; 
     $(this).data(this, "data", data); 
    } 

    $(data.img).fadeIn(100); 
}, 
function() 
{ 
    var data = $(this).data(this, "data"); 
    $(data.img).fadeOut(100); 
}); 

这将存储对a图像参考,但仅将其存储在悬停功能被激发。