У меня этот HTML-код с формой и элементом select.
...
<select id="sQuantity" name="sQuantity">
<option value="1">1</option>
</select>
...
<form name="myform" method="post" action="/someplace">
<input type="hidden" name="forminput" value="" />
...
</form>
...
Я пытаюсь переместить тег открытия формы над элементом выбора, который находится выше и вне формы. Поскольку я не могу изменить шаблон, в котором собрана HTML, я не могу сделать это обычными способами.
Можно ли это сделать с помощью jquery?
Я не хочу касаться каких-либо элементов в форме, и все должно оставаться там, где оно есть. Я только хочу переместить открывающий тег формы, чтобы он выглядел так:
...
<form name="myform" method="post" action="/someplace">
<select id="sQuantity" name="sQuantity">
<option value="1">1</option>
</select>
...
<input type="hidden" name="forminput" value="" />
...
</form>
...
РЕДАКТИРОВАТЬ:
Я не могу переместить элемент select, мне нужно переместить форму. Это связано с тем, что элемент select потеряет свою позицию и стиль, потому что форма намного дальше в документе.
Несмотря на ответы, я решил дать свой собственный ответ. Я сделал что-то, что работает, по крайней мере, пока мы уверены, что нет другого элемента с именем myform
.
var elements = [];
var elem = $("#sQuantity");
while (elem.attr('name') != "myform")
{
var next = elem.next();
elements.push(elem);
elem = next;
}
for (var i = elements.length - 1; i >= 0; --i)
$("form[name='myform']").prepend(elements[i]);
Он получает брата с next()
, затем он проверяет, совпадает ли имя элемента с "myform". Если нет, он добавляет его в массив, называемый elements
, и переходит к следующему, пока не найдет элемент с именем "myform", который должен быть формой. Затем, начиная со дна массива, он добавляет элементы в форму, сохраняя при этом порядок.
Перемещение элемента select
должно, в соответствии с вашим описанием, произвести тот же результат и будет намного проще:
var $sQuantity = $("#sQuantity").detach();
$('form[name="myForm"]').prepend($sQuantity);
Чтобы переместить открывающий тег только, вам нужно посмотреть на wrap()
и unwrap()
:
var myForm = $('form[name="myForm"]');
myForm.children().unwrap();
$('.sectionToWrap').wrap(myForm);
попробуй это:
$select=$("#sQuantity").clone();
$("#sQuantity").remove();
$("form[name='myform']").prepend($select);
select
и form
есть другие вещи (обратите внимание на ... между ними в вопросе)
select
внутри формы будет проще, поскольку в нем нет вложенных элементов.