-1

我正在尝试从具有以下结构$('.sent_comment_action')的元素向上移动:.message_to_comment

<div class="replay_comment_container">
    <input type="hidden" class="message_to_comment" name="message_to_comment" value="1234" />
    <a class="new_comment_action" href="#">Add Comment</a>
    <div class="comment_form">
        <form>
            <textarea class="comment_field" name="comment_body"></textarea>
            <input class="sent_comment_action" type="submit" value="Send" />
            <div class="error"></div>
        </form>
    </div>                    
</div>

仅仅因为标记可以在同一页面中重复,仅获取消息的 id 来评论是不够的,如下所示:

var message_id = $('.message_to_comment').val();

正如我$('.sent_comment_action')将要评论的消息的上下文一样,我可以使用:

//button in question
var message_id = button.parent().parent()... find('.message_to_comment').val(); 

但我不喜欢拥有一千个 parent() 函数的想法。所以,我的第二次尝试是使用如下closest()功能:

var message_id = button.closest('.message_to_comment').val();

当我测试上面的代码时,似乎.message_to_comment永远找不到该元素,因为它返回一个“未定义”。因此,请指导正确的方向以获得更好的解决方案,而不是使用 parent() 函数(如果存在另一种方式)

4

4 回答 4

2

带有类的输入message_to_comment不是按钮的父级。

看来你可以使用

button.closest('replay_comment_container').find('.message_to_comment').val();
于 2012-11-24T17:35:10.017 回答
1

这就是您要查找的内容,您要查找的元素不是按钮的父元素,它实际上是最接近的兄弟元素.comment_form

button.closest('.replay_comment_container').children('.message_to_comment').val();

你也可以试试

button.closest('.comment_form').prevAll('.message_to_comment').val();
于 2012-11-24T17:37:02.740 回答
0

如何使用while循环:

function getValue(element) 
{
   var parent = element;

   do 
   {
      parent = parent.parent();
      element = parent.find('.message_to_comment');
   }
   while (!element && parent)

   return element ? element.val() : null;
}

然后你可以使用:

var myValue = getValue(valbutton);
于 2012-11-24T17:39:50.123 回答
0

简单地回答你的问题, .prev(); :对于先前的元素是您正在寻找的方法。但我建议您稍微更改一下您的代码,以便更轻松地使用 jQuery 选择器查找元素。

<div class="replay_comment_container">
<a class="new_comment_action" href="#">Add Comment</a>
<div class="comment_form">
    <form name="form1" method="POST">
        <input type="hidden" class="message_to_comment" name="message_to_comment" value="1234" />
        <textarea class="comment_field" name="comment_body"></textarea>
        <input class="sent_comment_action" type="submit" value="Send" />
        <div class="error"></div>
    </form>
</div>                    
</div>

现在为您的 jQuery 选择器

$('.send_comment_action').click(function(){
    /*prevent form submitting */
    event.preventDefault();
    /* selector for multiple .replay_comment_container's */
    var value = $(this).prev().prev().val();
    /*a prev method I haven't tried but i believe is the best and correct method */
    var value = $(this).prev('.message_to_send').val();
    /* selector for single .replay_comment_container */
    var value = $('input[name="message_to_comment"]','.replay_comment_container').val();
});
于 2012-11-24T17:53:17.070 回答