Ну, потому что вы никогда не закрываете его;)
Когда вы нажимаете на тот же элемент, элемент удаляется следующим образом:
$("table").find(".new-element").remove();
И отложил обратно:
let el = $(this);
var new_elements = "<tr class='new-element display-none'><td colspan='2'><div><ul>" +
"<li><label>item1: </label><span>content1</span></li>" +
"<li><label>item2: </label><span>content2</span></li>" +
"</ul></div></td></tr>";
$(el).after(new_elements);
$(el).next().slideToggle("slow");
То, что вам нужно сделать, это проверить, являются ли «this» и «that» одинаковыми, прежде чем удалить и воссоздать его. Ну, по крайней мере, так было до быстрого закрытия.
До того, как сработал тумблер.
var active = $("table").find(".new-element");
var el = $(this);
if ($(el).next("tr").hasClass("new-element")) {
$(active).remove();
return false;
} else {
$(active).remove();
}
При активном переключателе:
$("table").find(".new-element").remove();
var new_elements = "<tr class='new-element display-none'><td colspan='2'><div><ul>" +
"<li><label>item1: </label><span>content1</span></li>" +
"<li><label>item2: </label><span>content2</span></li>" +
"</ul></div></td></tr>";
$(this).after(new_elements);
$(this).next().show();
$('.new-element').find("div").slideToggle('slow');
Это довольно быстрое закрытие:
https://jsfiddle.net/e54hu3rL/52/
Это также устраняет необходимость выполнять проверку, чтобы увидеть, совпадает ли выбранный элемент с последним, поэтому возвращаемое значение false можно отбросить.