JQuery - переместить тег открытия формы

0

У меня этот 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 потеряет свою позицию и стиль, потому что форма намного дальше в документе.

  • 1
    Перемещение элемента select внутри формы будет проще, поскольку в нем нет вложенных элементов.
  • 1
    Да, это возможно с JQuery. Вы пробовали что-нибудь?
Показать ещё 3 комментария
Теги:
forms

3 ответа

3
Лучший ответ

Несмотря на ответы, я решил дать свой собственный ответ. Я сделал что-то, что работает, по крайней мере, пока мы уверены, что нет другого элемента с именем 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", который должен быть формой. Затем, начиная со дна массива, он добавляет элементы в форму, сохраняя при этом порядок.

Вот тест jsfiddle.

1

Перемещение элемента select должно, в соответствии с вашим описанием, произвести тот же результат и будет намного проще:

var $sQuantity = $("#sQuantity").detach();
$('form[name="myForm"]').prepend($sQuantity);

Чтобы переместить открывающий тег только, вам нужно посмотреть на wrap() и unwrap():

var myForm = $('form[name="myForm"]'​);
myForm.​​​​​​children().unwrap()​;
$('.sectionToWrap'​).wrap(myForm);​
  • 0
    Я не могу переместить элемент select, мне нужно переместить форму. Это связано с тем, что элемент select теряет свою позицию и стиль, потому что форма находится намного дальше в документе.
1

попробуй это:

$select=$("#sQuantity").clone();
$("#sQuantity").remove();
$("form[name='myform']").prepend($select);

DEMO

  • 1
    Я думаю, это не сработает, если между select и form есть другие вещи (обратите внимание на ... между ними в вопросе)
  • 0
    точно, также я не могу переместить элемент выбора по причинам, которые я указал в моем редактировании.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню