Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   обрамить содержимое в тег (https://javascript.ru/forum/events/46230-obramit-soderzhimoe-v-teg.html)

piraids 02.04.2014 17:27

обрамить содержимое в тег
 
Есть код:
<div id="block_1">
<div class="title">title</div>
<input id="val" value="" input />
</div>


Как мне добавить форму, чтобы получилось вот так:
<div id="block_1">
<form>
<div class="title">title</div>
<input id="val" value="" input />
</form>
</div>


Пробую так:
var a = $('div[id^=block_]').html();
$(a).wrap('<form></form>');

Результат ничего

И так:
var a = $('div[id^=add_pay_]').children();
$(a).wrap('<form></form>');

Результат обрамляет в форму каждый дочерний элемент

Erolast 02.04.2014 17:36

Цитата:

var a = $('div[id^=block_]').html();
$(a).wrap('<form></form>');

Результат ничего
Потому-что метод html() возвращает не объект jQuery, с которым можно манипулировать, а просто строку с содержимым. То есть, у тебя получается
$("<div class='title'>title</div><input id='val' value='' input />").wrap('<form></from>');

jQuery думает, что ты хочешь создать сию цепочку элементов, ну создает ее, оборачивает и все. С тем блоком он ничего не предпринимает.

Цитата:

var a = $('div[id^=add_pay_]').children();
$(a).wrap('<form></form>');

Результат обрамляет в форму каждый дочерний элемент
Метод children же да, возвращает именно объект jQuery, с которым можно манипулировать. То, что в результате обрамлен каждый элемент набора - да, правильно, так и должно быть, таково действие большинства методов jQuery. Если хочешь обрамить сразу все элементы набора, используй вместо метода wrap метод wrapAll.

piraids 02.04.2014 23:07

Erolast,
спасибо за описание, пробовал также wrapAll, но почему то не срабатывает

piraids 02.04.2014 23:12

верней срабатывает, но как то не правильно
т.к. у меня блоков несколько
<div id="block_1">
<div class="title">title</div>
<input id="val" value="" input />
</div><div id="block_2">
<div class="title">title</div>
<input id="val" value="" input />
</div>

а скрипт имеет такой код:
var a = $('div[id^=block_]').children();
            $(a).wrapAll('<form></form>');

то получается что оно выгребает все, и обрамляет моим тегом, т.е.
<div id="block_1">
<form>
<div class="title">title</div>
<input id="val" value="" input />
<div class="title">title</div>
<input id="val" value="" input />
</div>
</form>

piraids 02.04.2014 23:35

решил проблему тем что указал еще один селектор в котором лежат блоки

var a = $('#blocks').find('div[id^=block_]').children();


Часовой пояс GMT +3, время: 03:45.