-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 に答える