2013-05-08 2 views
1

У меня есть следующий код, и мне нужно иметь идентификатор сообщения в jquery! пожалуйста, помогите мне в этом.получить идентификатор родительского родительского div с помощью jquery

foreach($posts->result() as $post){ 
    echo "<div class='post' id='$post->id' >"; 
     echo $post->content; 
     echo "<div class='commentor' id='commentor' >"; 
      echo "<input type='text' class='commentor_input' />"; 
     echo "</div>"; 
    echo "</div>"; 
} 

Я попытался получить код сообщения, используя нижеследующий код, но не работает!

$('.commentor_input').change(function(e){ 
    e.stopImmediatePropagation(); 
    var comment = $(this).val(); 
    var post_id = $(this).closest("div").find(".post").attr("id"); 
    alert(post_id); // alerts Undefined! 
}); 

ответ

7

Используйте closest("div.post")

var post_id = $(this).closest("div.post").attr("id"); 

closest возвращает первый элемент, соответствующий вашему селектор, поэтому он вернулся div.commentor в вашем случае, и .find не смогли найти никаких .post внутри него, поэтому undefined.

+0

Гм, я не получаю 3 downvotes я получил на этот ответ. Пожалуйста, объясните, пожалуйста, какой-нибудь иллюстратор? – Dogbert

+0

Похоже, 2 из downvoters получили запрет с этого сайта сегодня. – Dogbert

2

Просто измените .find() на .parent().

$('.commentor_input').change(function(e){ 
    e.stopImmediatePropagation(); 
    var comment = $(this).val(); 
    var post_id = $(this).closest("div").parent(".post").attr("id"); 
    alert(post_id); // alerts Undefined! 
}); 

DEMO

0

Try:

$('.commentor_input').change(function(e){ 
    e.stopImmediatePropagation(); 
    var comment = $(this).val(); 
    var post_id = $(this).parents("div.post").attr("id"); 
    alert(post_id); // alerts Undefined! 
}); 

Docs jquery.parents

Смежные вопросы