.replaceWith() не работает в jQuery 1.9+

Я пытаюсь клонировать <textarea> и клонировать и заменить цифру в метке <label> Number 1 <label> увеличивается на 1 при каждом нажатии кнопки добавления (поэтому первая метка будет иметь номер 1, метка под номером 2 и т. д.).

Это работает с jQuery 1.8 и ниже, но все, что выше, не клонируется и добавляет 1 к цифре.

HTML

<div>
 <label for="number">Number <span class="one">1</span></label>
 <textarea id="number"></textarea>
</div>
<button>Add</button>

JQuery

var $row = $('div').clone(),
    cloneCount = 2;

$('button').click(function () {
    $row.clone().insertBefore($("button"));
    $('span').clone().attr('span', cloneCount++).replaceWith($('[class=one]:last')).text(cloneCount - 1);
});

JSFIDDLE: http://jsfiddle.net/wba6jvkj/

2 ответа

Решение

Я не знаю, с чем ты пытался .attr('span' и почему это работает в < 1.8, или почему вы вычитаете одно из cloneCount, но это должно делать то, что вы хотите:

var $row = $('div').clone(),
    cloneCount = 2;

$('button').click(function () {
    $row.clone().insertBefore($("button"));
    $('span.one:last').text(cloneCount++);
});

Пример jsFiddle

(Отвечая на этот старый вопрос, поскольку Google привел меня сюда.)

Поведение.replacewith()с отключенными узлами было изменено в jQuery1.9. Вы можете найти следующее объяснение в документации replaceWith() (раздел «Дополнительные примечания»), а также в руководстве по обновлению jQuery1.9 :

До jQuery1.9 пытался добавить или изменить узлы в текущем наборе jQuery, если первый узел в наборе не был подключен к документу, и в этих случаях возвращал новый набор jQuery, а не исходный набор. Метод мог вернуть или не вернуть новый результат в зависимости от количества или связности его аргументов! Начиная с jQuery1.9,.after(),.before()и всегда возвращайте исходный неизмененный набор. Попытка использовать эти методы на узле без родителя не имеет никакого эффекта, то есть ни набор, ни содержащиеся в нем узлы не изменяются.

В вашем коде вы используете.replaceWith()на клонированном элементе, который еще не был вставлен в DOM.

Другие вопросы по тегам