2013-08-13 5 views
0

Я попытался обернуть div после замены исходного элемента от div до input, но не работает, может кто-нибудь предложить, что не так с моим кодом ниже, спасибо.jQuery обернуть элемент после replaceWith метод, но не работать

$('.sth').replaceWith(
    $('<input>', { 
     value: $('.sth').text(), 
     type: 'text' 
    }) 
).wrap('<div class="new" />'); 

Демо: http://jsfiddle.net/zhmUK/1/

+0

проблема-цепочки, ReplaceWith не возвращает вход, просмотреть обновленную скрипку: http://jsfiddle.net/zhmUK/6/ –

ответ

4

http://api.jquery.com/replaceWith/

Заменить каждый элемент в наборе соответствующих элементов с предоставленной новым содержанием и возвращать набор элементов, который был удален.

$('.sth').replaceWith(
    $('<input>', { 
     value: $('.sth').text(), 
     type: 'text' 
    }).wrap('<div class="new" />').parent() 
); 
+0

Зачем ставить ' parent() 'после' wrap() '? –

+1

+1 для '.parent()'! – Cherniv

+0

@CharlesYeung, 'wrap' не возвращает обертывающий элемент, а элемент завернут. – plalx

2

replaceWith возвращает ваш удален .sth элемент. Образец цитирования:

Метод .replaceWith(), как и большинство методов JQuery, возвращает объект JQuery, так что другие методы могут быть прикован на него. Однако, необходимо отметить, что возвращается исходный объект jQuery. Этот объект ссылается на элемент, который был удален из DOM, а не - новый элемент, который его заменил.

Итак, вы обертываете не тот элемент, который больше не находится в DOM.

Отсюда: http://api.jquery.com/replaceWith/

1

вы можете попробовать

$('.sth').wrap('<div class="new" />').replaceWith(
    $('<input>', { 
     value: $('.sth').text(), 
     type: 'text' 
    }) 
);