使用underscore.js在HTML页面上实现JSP的forEach向页面循环赋值

这是之前公司的一个大佬写的,感觉还是很有用的,拿出来分享下,希望对你们有帮助。

这里用的是下划线,首先引入underscore.js  下载地址

封装方法:

function renderTemp(data, el, varName, isReplace) {
    // console.log('renderNote: ', data)
    document.getElementById('');
    if (!el._temp) {
        var $script = $(el).find('script');
        el._temp  = _.template($script.text(), {variable: varName});
        $script.replaceWith(el._temp(data));
    } else if (isReplace) {
        $(el).children().eq(0).replaceWith(el._temp(data))
    } else $(el).append(el._temp(data));
}

页面标签定义(以下拉为例,其他也可以):

<select id="list">
    <script type="text/template">
            <!--需要循环显示的列表-->
            <option class="option" value="<%= data.XXX%>">//可以直接赋值value、attr
                <%= data.XXX%>//可以多个 <%= data.XXX%>
            </option>
    </script>
</select>

例如列表:

<div class="tabs-panel is-active" id="id">
    <ul data-inset="false"  id="list">
        <script type="text/template">
            <li class="li">
                <a href="XXX.html?id=<%= note.id %>" target="_top">//可以用于属性赋值
                    <div class="dashed">
                        <div class="note_box note_left box_relative">
                            <div class="note_box_title"><%= note.title %></div>
                            <div class="time1"><%= note.releasetime %></div>
                            <div class="figcaption">
                                <p class="twoline"><%= note.content %></p>
                            </div>
                         </div>
                    </div>
                </a>
            </li>
        </script>
    </ul>
</div>

调用封装方法进行赋值:

//例如xjax返回的数据:
success:function(data){
    var name = document.getElementById("list");//获取的是<script type="text/template"></script>上一个的标签元素
    for (var i = 0; i < data.length; i++) {
        //name是获取的节点也就是这里的select标签,第三个参数是定义标签<%= data.XXX%>里data.(自己定义)
        renderTemp(data[i], name, 'data')
    }
}

会出现的问题:异步循环显示时标签的内容会叠加,记得在循环之前$(".option").remove();或者empty一下。

<script type="text/template"></script>不能删除。

例如这里的select:$(".option").remove(); li则是:$('.li').empty(); 具体的可以自己尝试。

做完这三步就可以实现HTML的循环赋值了,下划线的用法还有很多想了解的可以看上面的连接文档。

 

我的第一个博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值