简单的方式来改变输入字段的视觉顺序动态(不改变表单HTML)
Easy way to change visual order of input fields dynamically (without changing form HTML)?
我有一个特定的表单,作为angular指令模板。它按一定顺序包含几个INPUT字段。我不能使用ng-repeat方法动态构建该表单,因为有些字段具有自定义行为、特殊验证器等。
<div ID="1"> input field 1</div>
...
<div ID="7"> input field 7</div>
然而,在某些用例下,我需要以不同的随机顺序显示这些输入。表单的逻辑和内容保持不变,但只有一个输入,以前是第7应该成为第1。如果我能使用一个CSS类来有条件地应用于某些元素(可能是使用ng-class选项),那就太好了。
我可以使用什么CSS来保持相同的模板(上面的草图),但视觉上"div id=7"出现在"div id=1"之前?
我更喜欢避免DOM操作,并以角友好的方式使用它。
flexbox
可以使用order
属性改变元素的视觉顺序。
.wrap {
display: flex;
flex-direction: column;
}
.wrap div {
padding: 1em;
border: 1px solid black;
margin-bottom: 1em;
}
#first {
background: #bada55;
font-weight: bold;
order: 7
}
#last {
background: #663399;
color: white;
font-weight: bold;
order: 1
}
<div class="wrap">
<div ID="first">I'm first in the source order but not visually</div>
<div ID="last">I'm last in the source order but visually I'm first</div>
</div>
之后,可以通过Javascript添加随机性和循环分配顺序(我假设,我的JS fu基本上是不存在的)。
由于div元素是块元素,因此每个div将显示在其行上,因此仅通过CSS不可能在第一个之前显示第二个div。
但是如果你把这个div样式设置为display:inline;
或display:inline-block;
,例如宽度,那么你就可以使用float:right;
float:left;
来改变顺序。
我还谷歌了"通过css改变html元素的顺序",它也给了我一些其他的想法。
在stackoverflow上也有一些答案比如这个
相关文章:
- 所选表单-当表单的值被选中时,如何更改变量值
- 如何正确地改变输入表单的值以引起“注意”;改变“;事件
- javascript不改变表单中的字段的简单数学
- 触发标准“;改变“;表单对象上的事件-由其上的任何侦听器拾取
- 使用javascript在iframe中发布表单,但iframe源不会随着文件的增大而改变
- 如何使url改变适当的单页jQuery登录,注册和忘记密码表单
- Rails:使用image_submit_tag改变表单在悬停时提交图像
- JS代码改变表单提交不工作
- 简单的方法使用getElementsByTagName来改变表单目标
- 改变表单目标,重定向现有iframe
- 如何从拖放改变表单的值
- 为什么Firefox在从javascript加载时改变表单标签属性?
- jQuery根据所选值改变表单动作
- 简单的方式来改变输入字段的视觉顺序动态(不改变表单HTML)
- AngularJS在提交事件上改变表单动作
- jQuery改变表单的响应文本
- 通过JQuery改变表单标签上的标签
- ExtJs改变表单面板按钮的布局
- Javascript OnSubmit不会'改变表单的动作
- 不能通过jquery改变表单动作