同一个div的多次迭代?

时间:2014-02-12 19:59:46

标签: javascript html iteration

所以我在屏幕上有一个菜单,其中有几个相同的盒子 - 唯一的区别是盒子的编号不同。

<div id="1">
    <select name="option1">
        <option value="1">foo</option>
        <option value="2">bar</option>
    </select>
</div>

<div id="2">
    <select name="option2">
        <option value="1">foo</option>
        <option value="2">bar</option>
    </select>
</div>

每个div都是900行代码,每当我改变时我都要改变每个div - 写一个for循环并使用document.write完成只写一次div(并减小文件大小)的最佳方法?

var divCode

for (var i=1; i < 7; i++){
 divCode +='
   <div id="'+i+'">
   <select name="option'+i+'">
   <option value="1">foo</option>
   <option value="2">bar</option>
   </select>
   </div>'
}
document.write('divCode')

或者javascript中有更好的方法吗?我想有一个,考虑到编写900行连接字符串代码并不好玩(或有效)。

2 个答案:

答案 0 :(得分:5)

您可以使用像小胡子这样的JavaScript模板引擎来保持代码的简单性和可维护性。

这里有一个例子(除了胡子之外还使用jQuery):
HTML:

<script type="text/template" id="template_divs">
    {{#divs}}
    <div id="{{id}}">
        Hallo my name is {{name}}!
    </div>
    {{/divs}}
</script>

<div id="container">
</div>

JS:

var someDivs = {divs: [{id: 1, name: "Tom"},{id: 2, name: "Bob"},{id: 3, name: "Earl"}]};

var parsed = Mustache.render($('#template_divs').html(), someDivs);

$('#container').html(parsed);

我为你演示了一个小提琴:http://jsfiddle.net/2gYCz/

答案 1 :(得分:1)

我不得不同意使用Javascript库来模板将是所描述问题的理想选择。但是,我想使用没有库的html和Javascript来提供替代方案。我要做的是在html中创建一个不可见的模板,如下所示:

<强> HTML

<div class="container">
    <div class="template"> <div class="someDiv" style="display:none;overflow: hidden;">Some Div</div> </div>
</div>

<强>的Javascript

 var item =document.querySelector(".someDiv" );
        var parent = document.querySelector(".template");
        for (var i=0;i<3;i++){
            item = item.cloneNode(true);
            item.setAttribute("id","newDemo"+i);
            item.setAttribute("style","");
            parent.appendChild( item );
        }

使用Javascript我会克隆项目并使用动态值设置属性。