Приведенный ниже код откроет .comment-box
, если он не существует, и удалит его, если он существует для отдельных потоков.
Я добавил класс для вашей функции .closest()
, еслиВы просто ищете div
, тогда это довольно широко!Если вы добавите класс, вы найдете его гораздо лучше - например, тогда вы можете добавить несколько div-ов и упаковщиков между вашей ссылкой ответа и оболочкой.Возможно, вам не нужно делать это сейчас ... но вы можете сделать это в будущем!Это означает, что ваш код более перспективен.
Я прокомментировал код ниже.Он будет работать для нескольких потоков / разделов комментариев на одной странице, но также будет отлично работать для отдельной области комментариев.
Я также добавил поле комментария к .before()
ссылке ответа, а не .after()
... Это было более естественно с точки зрения пользовательского интерфейса, но, очевидно, это чисто стилистическое изменение.
Демо
// Create comment box after clicking reply
$('.replylink').click(function(event) {
// Stop default action for click (i.e. going to top of page)
event.preventDefault();
// Set wrapping thread div
// this lets you have multiple threads on the same page (if needed)
thread = $(this).closest("div.thread");
// Check if thread has an opened comment box
if (thread.find(".comment-box").length > 0) {
// Delete any comment-box within this comment thread
thread.find(".comment-box").remove();
} else {
// Uncomment the line below if you want to close all other comment boxes
// $(".comment-box").remove();
// Create a coment box if it doesn't exist
var commentBox = $('<div class="comment-box"></div>');
$(this).before(commentBox);
}
});
.comment-box {
height: 20px;
padding: 10px;
border: 1px solid blue;
margin-bottom: 10px;
}
.thread {
border: 1px black solid;
padding: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="thread">
<h3>Thread One</h3>
<a href="#" class="replylink">Reply</a>
</div>
<div class="thread">
<h3>Thread Two</h3>
<a href="#" class="replylink">Reply</a>
</div>
<div class="thread">
<h3>Thread Three</h3>
<a href="#" class="replylink">Reply</a>
</div>