Использование.before(); и после(); обернуть элементы
Я пытаюсь завернуть <label>
, <input type="text" />
, а также <select>
элементы с <div class="formItem"></div>
исправить положение в форме, которую я не могу редактировать напрямую. Почему-то, когда я пытаюсь использовать следующий код:
$("label").before("<div class=\"formItem\">");
$("input[type=text]").after("</div>");
$("select").after("</div>");
Не работает Это просто добавляет <div class="formItem"></div>
перед каждым <label>
что не помогает мне
Я посмотрел на .wrap();
но не ясно, как я могу использовать это, чтобы обернуть несколько элементов, как я пытаюсь сделать. Вот пример разметки HTML:
<label>Text Box</label>
<input type="text" name="Text Box" />
<label>Select Menu</label>
<select name="Select Menu">
<option>Example</option>
</select>
Там около 10 комплектов, 9 текстовых полей и 1 блок выбора, если это имеет значение.
3 ответа
Это просто не то, как работает jQuery API. Совсем.
.before()
:
Вставьте содержимое, указанное параметром, перед каждым элементом в наборе соответствующих элементов.
.after()
:
Вставить содержимое, указанное параметром, после каждого элемента в наборе соответствующих элементов.
Не думайте с точки зрения открытых и закрытых тегов. Думайте с точки зрения фактических элементов.
Вы, вероятно, ищете .wrapAll()
,
$('label').each(function () {
$(this).next('input, select').andSelf().wrapAll('<div class="formItem"/>');
});
С помощью jquery вы можете добавлять только полные элементы. То есть они должны включать конечные теги. Это потому, что вы действительно звоните document.createElement('div')
, Поэтому, чтобы решить эту проблему, максимально приближаясь к исходному коду, просто используйте:
var newEl = $("select").after("<div class=\"formItem\"></div>");
$("input[type=text]").appendTo(newEl);
$("select").appendTo(newEl);
Попробуй это:
$('label').next().andSelf().wrap("<div class=\"formItem\">");
Он будет заключать в себя элементы метки плюс следующий элемент в div.formItem.