jQuery $(this).find和$(this).children没有在这段代码中工作?如果正确,请告诉我原因

时间:2013-07-28 18:19:18

标签: jquery find children

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
var commentUrl = 'comment.jsp';

$('.privateTimeline').click(function() {
 $.ajax({
 url: commentUrl,
 type:'post',
  data:{
       no : $(this).find('.no').text()  // working!
 },
 success:function(data){
    if( $(this).children('.comment').is(':hidden') ) {  // not working!
    $(this).find('.comment').slideDown(400);  // not working!
    $(this).find('.comment').html(data);   // not working!
 }
 else {
    $(this).find('.comment').slidUp(400);  // not working!
  }
 });
})

</script>
  1. 我不太清楚这个代码不起作用。
  2. 我想选择privateTimeline的子类节点,所以make event。
  3. 无法在成功功能部分工作,但$(this)正在数据部分工作。

2 个答案:

答案 0 :(得分:1)

您的上下文在.success()回调中发生了变化,因此this指的是您期望的jQuery对象以外的其他内容。

你可以做这样的事情来解决它:

var _this = this;
...
, success(function(){
    $(_this).find(".yourClass").yourFunc()
});

或者:

...
, success((function() {
    $(this).find(".yourClass").yourFunc();
}).bind(this));

答案 1 :(得分:1)

这应该有效:

var $target =$('.privateTimeline');
$target.click(function() {
    $.ajax({
        url: commentUrl,
        type:'post',
        data:{
            no : $(this).find('.no').text()  // working!
        },
        success:function(data){
           if( $target.children('.comment').is(':hidden') ) {  // not working!
               $target.find('.comment').slideDown(400);  // not working!
               $target.find('.comment').html(data);   // not working!
            }
            else {
                $target.find('.comment').slidUp(400);  // not working!
             }
        }
    });
});

success:function(data){}中,$(this)不再指向$('.privateTimeline')。因此,您可以使用其唯一的选择器访问它。

另外,你的右括号错了,所以我为你纠正了。