1

返信ボタンが押された場所に応じて、返信フォームをあるコメントブロックから別のコメントブロックに移動しようとしています。

たとえば、私はこのコードを持っています。

<ul class="comments-list"> 
    <li class="comment" id="'.$comComment->CommentID.'">
        <div>Comment Content</div>
        <a class="comment-reply-link"></a>
        <ul>
            <li>
                <div>Comment Content</div>
                <a class="comment-reply-link"></a>
            </li>
        </ul>
    </li>
    <li>
        <div>Comment Content</div>
        <a class="comment-reply-link"></a>
    </li>
</ul>

そして、フォームに返信します。

<div id="comment-reply">And Form HEre</div>

私は表示ブロックでそれを行う方法を知っていますが、すべてのコメントブロックで返信フォームを作成して非表示にすることは避けたいと思います。のようなものでそれを行うことは可能ですかparentNode.insertBeforeparentNode.removeChild.またはそれを行うためのより良い方法がありますか?ヘルプまたは関連リンクをいただければ幸いです。ありがとうございました。

4

1 に答える 1

1

jQueryでそれを行う方法は次のとおりです。

http://jsfiddle.net/Cd4Xk/

$('a.comment-reply-link').click(function(){

    $(this).after($('#comment-reply'));

});

jQueryがなければ、それはより困難です。この質問は私を最終的な解決策に導きました:ライブラリを使用せずにJavaScriptにAfter()を挿入するにはどうすればよいですか?

また、このリンクはこれを解決するのに役立ちました: http ://snipplr.com/view/2107/insertafter-function-for-the-dom/

これが実用的な解決策です:http: //jsfiddle.net/Cd4Xk/1/

そのソリューションのコードは次のとおりです。

function replyForm(me){
    var commentForm = document.getElementById('comment-reply')
    insertAfter(commentForm, me);

}

function insertAfter(newElement,targetElement) {
    //target is what you want it to go after. Look for this elements parent.
    var parent = targetElement.parentNode;

    //if the parents lastchild is the targetElement...
    if(parent.lastchild == targetElement) {
    //add the newElement after the target element.
    parent.appendChild(newElement);
    } 
    else {
    // else the target has siblings, insert the new element between the target and    it's next sibling.
     parent.insertBefore(newElement, targetElement.nextSibling);
    }
}

もちろん、リンクに追加する必要がありonclick="javascript:replyForm(this)" ます。

お役に立てば幸いです。

于 2012-07-23T15:54:48.237 に答える