Я пытаюсь заставить jQuery сделать это:
Когда я нажимаю кнопку, он выбирает элемент next() и клонирует его. Если я снова нажму кнопку, он выберет следующий элемент следующего элемента и клонирует его, и так далее ...
ДЛИННАЯ ИСТОРИЯ КОРОТКО ... Я щелкаю один раз, когда он клонирует "2", я щелкаю еще раз, он клонирует "3" и так далее ...
Что происходит не так и как я могу этого добиться?
var x = $(".show");
$(".button").click(function() {
$(".first").next().clone(true, true).appendTo(x);
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "container">
<button class = "button">CLICK ME</button>
<ul style = "position:relative; top:100px;">
<div class = "test">
<div class=first>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
</div>
<div class = "show"></div>Также вы должны добавить закрывающий тег: </ul> к <ul>, чтобы закрыть его.
Я получил базовый стиль, чтобы читатели не запутались в большом количестве кода ... сохраняя простоту



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я бы сделал что-то вроде этого:
var x = $(".show");
var count = 0;
$(".button").click(function() {
var element = $(".first");
count++;
for (var i = 0; i < count; i++) {
element = $(element).next();
}
$(element).clone(true, true).appendTo(x);
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "container">
<button class = "button">CLICK ME</button>
<ul>
<div class = "test">
<div class=first>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
</div>
<div class = "show"></div>Эта демонстрация является функцией многократного использования (просто не забудьте объявить интервал (var i = 0) вне функции). Поскольку вы не указали, хотите ли вы клонировать большее количество заданных узлов, я добавил подтверждение, как только вы достигнете этого предела.
var i = 0;
$(".button").on('click', function() {
dupeNode('.hide li', '.show');
});
function dupeNode(selector, TO) {
if (i > $(selector).length - 1) {
return msg.call(this);
}
$(selector).eq(i).clone(true, true).appendTo($(TO));
i++;
}
function msg() {
var m = confirm(`
Last item was already cloned.
[OK] to at the beginning or
[Cancel] to quit.`);
var x = m ? i = 0 : false;
return x;
}ul {
list-style: none;
}
li {
display: inline-table;
}
li::after {
content: "\2c\a0";
}
.show {
visibility: visible
}
.hide {
visibility: hidden
}<main class = "container">
<button class = "button">CLICK ME</button>
<ul class='show'></ul>
<ul class = "hide">
<li class=first>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</main>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Где
.show? Кстати,<li>имеет больше смысла в<ul>, чем в<div>. Если вам не нужны эти дурацкие пули, добавьтеlist-style:noneв<ul>CSS.