2010-05-07 61 views
1

这是我的HTML:jQuery的发现工作不

 <p class="first">blah blah <a href="" class="more">read more</a></p> 
     <div class="read_more"> 
      <p>more text</p> 
     </div> 

和Javascript:

$(document).ready(function(){ 
    $('a.more').click(function(){ 
    $(this).find('.read_more').slideDown(); 
    return false; 
    }); 
}); 

似乎

并没有做任何事情(READ_MORE设置为显示:无)任何想法?

回答

4

试试这个:

$(文件)。就绪(函数(){ $( 'a.more')点击(函数(){$ (本).parent()。 next()。find('。read_more')。slideDown(); return false; }); });

更新:

Here is the demo :)

代码:

$(document).ready(function(){ 
    $('a.more').click(function(){ 
    $(this).parents().find('.read_more').slideDown('slow'); 
    return false; 
    }); 
}); 

你也可以这样做:

$(document).ready(function(){ 
    $('a.more').click(function(){ 
    $('.read_more').slideDown('slow'); 
    return false; 
    }); 
}); 

或者这样:

$(document).ready(function(){ 
    $('a.more').click(function(){ 
    $(this).parent().next().slideDown('slow'); 
    return false; 
    }); 
}); 
+0

您正在要求它找到.read_more INSIDE您的锚标记 - 它不在那里。该解决方案为您解决这个问题。 – Erik 2010-05-07 10:45:18

+0

nope仍然不能正常工作:( – fire 2010-05-07 10:46:39

+0

@fire:请参阅我的更新答案。 – Sarfraz 2010-05-07 10:51:19

2

.find(..)查找当前元素中选择。

你可能想要的是

$(document).ready(function(){ 
    $('a.more').click(function(){ 
     $(this).parent().parent().find('.read_more').slideDown(); 
     return false; 
    }); 
}); 

编辑

增加了另一个.parent()作为<a>里面<p>.read_more不在<p>

1

$(这)是指a.more这没有一个孩子叫.read_more这就是为什么它不工作

1

find()无法工作的一个潜在原因是您寻找的元素在您调用它时尚未加载。

在我的情况下,我用一个编辑器插件替换了一个文本字段,编辑器在我调用find()的时候没有加载。

如果在知道应该能够找到元素时找不到元素,请在调用find()之前尝试setTimeout以添加延迟。

注意:setTimeout不是一个很好的解决方案,它只是帮助诊断问题。试着想出一种方法,等到元素加载完成后再进行find()调用。

+1

感谢您回答近7年后,2010年我需要您的时候您在哪里? :- – fire 2017-04-26 09:56:32

+0

刚刚开始上学,我什么都不知道哈哈。只希望我的回答可能会帮助其他人坚持这一点。 – 2017-04-27 14:20:32