JQuery-移动表单开始标记

JQuery-移动表单开始标记,jquery,html,forms,Jquery,Html,Forms,我有一个带有表单和select元素的HTML ... <select id="sQuantity" name="sQuantity"> <option value="1">1</option> </select> ... <form name="myform" method="post" action="/someplace"> <input type="hidden" name="forminput" value="" />

我有一个带有表单和select元素的HTML

...
<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>
...
。。。
1.
...
...
...
我试图将表单开始标记移动到表单上方和外部的select元素上方。 因为我不能改变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>
...
。。。
1.
...
...
...
编辑:


我不能移动select元素,我必须移动表单。 这是因为select元素会失去其位置和样式,因为表单在文档中的位置要低得多。

请尝试以下操作:

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

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

根据您的描述,移动
select
元素应该会产生相同的结果,而且会更容易:

var $sQuantity = $("#sQuantity").detach();
$('form[name="myForm"]').prepend($sQuantity);
要仅移动开始标记,您需要查看和:


根据您的描述,移动
select
元素应该会产生相同的结果,而且会更容易:

var $sQuantity = $("#sQuantity").detach();
$('form[name="myForm"]').prepend($sQuantity);
要仅移动开始标记,您需要查看和:


尽管给出了答案,我还是决定给出自己的答案。我已经做了一些有效的东西,至少只要我们确定没有其他名为
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”的元素,该元素应该是表单。然后,从数组的底部开始,它将元素前置到表单,从而保持顺序


尽管给出了答案,我还是决定给出自己的答案。我已经做了一些有效的东西,至少只要我们确定没有其他名为
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
元素会更容易,因为它没有嵌套的元素。jQuery也可以这样做。你试过什么吗?因为我对JQuery了解不够,所以我没有试过玩。此外,我不知道在页面创建后是否可以将元素移动到表单中,这些元素是否仍发布在提交上?我无法移动select元素,因为它的样式和位置将丢失,因为表单在页面中的位置要低得多document@JoséMarquez一旦元素是dom节点,就不能移动它的开始标记。您必须将select移动到表单中。如果这会影响select的位置,那就太糟糕了。在表单中移动
select
元素会更容易,因为它没有嵌套的元素,这在jQuery中是可能的。你试过什么吗?因为我对JQuery了解不够,所以我没有试过玩。此外,我不知道在页面创建后是否可以将元素移动到表单中,这些元素是否仍发布在提交上?我无法移动select元素,因为它的样式和位置将丢失,因为表单在页面中的位置要低得多document@JoséMarquez一旦元素是dom节点,就不能移动它的开始标记。您必须将select移动到表单中。如果这会影响您选择的位置,那就太糟糕了。我想如果
select
表单
之间存在其他东西(请注意问题处它们之间的…),那么这就行不通了,此外,由于我在编辑中指定的原因,我无法移动select元素。@JoséMarquez如果您可以使用jquery和javascript,您可以移动任何您喜欢的内容。您关于无法更改HTML的评论不适用于动态移动页面上的元素。如果在
选择
表单
元素之间有其他元素,您应该发布更多的标记,以便我们建议更好的替代方案。就目前情况而言,这个答案确实根据您提供的内容回答了您的问题+1@Jos埃马尔克斯一点也不。我只建议你把所有重要的信息都说清楚。亚历山德罗米诺切里的回答与你当时给他的信息是正确的。@leemo这就是为什么我在发现问题可能被误解后编辑了我的问题。TGO甚至在编辑之前就理解了。我想如果
选择
表单
之间有其他东西(请注意问题处它们之间的…),这是行不通的,此外,由于我在编辑中指定的原因,我无法移动select元素。@JoséMarquez如果您可以使用jquery和javascript,您可以移动任何您喜欢的内容。您关于无法更改HTML的评论不适用于动态移动页面上的元素。如果在
选择
表单
元素之间有其他元素,您应该发布更多的标记,以便我们建议更好的替代方案。就目前情况而言,这个答案确实根据您提供的内容回答了您的问题+1@Jos埃马尔克斯一点也不。我只建议你把所有重要的信息都说清楚。亚历山德罗米诺切里的回答与你当时给他的信息是正确的。@leemo这就是为什么我在发现问题可能被误解后编辑了我的问题。TGO甚至在编辑之前就理解了。我不能移动select元素,我必须移动表单。这是因为“选择”元素将失去其位置和样式