js动态拼接标签,样式丢失的解决方法

本文介绍在使用jQuery的append()方法动态添加包含EasyUI组件的元素时遇到的样式丢失问题,并提供了解决方案,即使用$.parser.parse()重新解析DOM元素。

参考:http://blog.youkuaiyun.com/u010552788/article/details/49363107

今天使用jquery的append()方法来拼接,发现拼接的元素引用的easyui样式丢失。原因是easyui只在最初页面加载的时候进行一次性渲染。

想要的效果:

之前的效果:


起作用的代码:

var tagobj = $('#append');
$.parser.parse(tagobj);

页面相关代码:

<fieldset class="fieldset_jy">
                    <legend class="legend_jy">气瓶信息</legend>
                    <div style="padding-left: 5px;" id="append">
                            <ul class="_searcher new-line">
                                <li>出厂日期:
                                    <input id="outputDate1" name="outputDate" type="text" class="easyui-datebox"
                                           required="true" style="width: 150px;" validType="date"
                                           value="" data-options="formatter:ww4,parser:w4"/>
                                </li>
                                <li>出厂编号:
                                    <input id="serialNumber1" name="serialNumber" type="text" class="easyui-validatebox"
                                           required="true" style="width: 130px;" value=""
                                           validType="midLength[0,50]" invalidMessage="50个字符之间!"/>
                                </li>
                                <li>起用日期:
                                    <input id="enableDate1" name="enableDate" type="text" class="easyui-datebox"
                                           required="true" style="width: 150px;"  validType="date"
                                           value="" data-options="formatter:ww4,parser:w4"/>
                                </li>
                                <li>下次检验日期:
                                    <input id="nextTestDate1" name="nextTestDate" type="text" class="easyui-datebox"
                                           required="true" style="width: 150px;" validType="date"
                                           value="" data-options="formatter:ww4,parser:w4"/>
                                </li>
                                <li>制造单位:
                                    <input id="makeCompany1" name="makeCompany" type="text" class="easyui-validatebox"
                                           required="true" style="width: 130px;" value=""
                                           validType="midLength[0,100]" invalidMessage="100个字符之间!"/>
                                </li>
                                <li>
                                       <a id="query" href="javascript:void(0);" onclick="addLineJs()" class="easyui-linkbutton" iconCls="icon-add" style="vertical-align: middle;">添加</a>
                                </li>
                            </ul>

                        </div>
                </fieldset>

相关js代码:

<script type="text/javascript">
    function addLineJs(){
        var outputDate1 = $("#outputDate1").val();
        var serialNumber1 = $("#serialNumber1").val();
        var enableDate1 = $("#enableDate1").val();
        var nextTestDate1 = $("#nextTestDate1").val();
        var makeCompany1 = $("#makeCompany1").val();

        var num = $('#append .new-line').length;
        alert(num);
        var html2 = '';
        var arrOutputDate = new Array();
        $("input[name='outputDate']").each(
                function(){
                    arrOutputDate.push($(this).val());
                }
        )
        var arrSerialNumber = new Array();
        $("input[name='serialNumber']").each(
                function(){
                    arrSerialNumber.push($(this).val());
                }
        )
        var arrEnableDate = new Array();
        $("input[name='enableDate']").each(
                function(){
                    arrEnableDate.push($(this).val());
                }
        )
        var arrNextTestDate = new Array();
        $("input[name='nextTestDate']").each(
                function(){
                    arrNextTestDate.push($(this).val());
                }
        )
        var arrMakeCompany = new Array();
        $("input[name='makeCompany']").each(
                function(){
                    arrMakeCompany.push($(this).val());
                }
        )
        for(var i=1;i<=num;i++){
            var outputDate = 'outputDate' + (i + 1);
            var serialNumber = 'serialNumber' + (i + 1);
            var enableDate = 'enableDate' + (i + 1);
            var nextTestDate = 'nextTestDate' + (i + 1);
            var makeCompany = 'makeCompany' + (i + 1);
            html2 += '<ul class="_searcher new-line">';
            html2 += '<li>出厂日期:<input id="' + outputDate + '" name="outputDate" type="text" class="easyui-datebox" required="true" style="width: 150px;" validType="date" value="" data-options="formatter:ww4,parser:w4"/> </li>';
            html2 += '<li>出厂编号:<input id="' + serialNumber + '" name="serialNumber" type="text" class="easyui-validatebox" required="true" style="width: 130px;" value="" validType="midLength[0,50]" invalidMessage="50个字符之间!"/> </li>';
            html2 += '<li>起用日期:<input id="' + enableDate + '" name="enableDate" type="text" class="easyui-datebox" required="true" style="width: 150px;"  validType="date" value="" data-options="formatter:ww4,parser:w4"/> </li>';
            html2 += '<li>下次检验日期:<input id="' + nextTestDate + '" name="nextTestDate" type="text" class="easyui-datebox" required="true" style="width: 150px;" validType="date" value="" data-options="formatter:ww4,parser:w4"/> </li>';
            html2 += '<li>制造单位:<input id="' + makeCompany + '" name="makeCompany" type="text" class="easyui-validatebox" required="true" style="width: 130px;" value="" validType="midLength[0,100]" invalidMessage="100个字符之间!"/> </li>';
            html2 += '<li>   <a id="query" href="javascript:void(0);" onclick="removeLineJs()" class="easyui-linkbutton" iconCls="icon-remove" style="vertical-align: middle;">删除</a></li>';
            html2 += '</ul>';
        }
        var html = '';
        html += '<ul class="_searcher new-line">';
        html += '<li>出厂日期:<input id="outputDate1" name="outputDate" type="text" class="easyui-datebox" required="true" style="width: 150px;" validType="date" value="" data-options="formatter:ww4,parser:w4"/> </li>';
        html += '<li>出厂编号:<input id="serialNumber1" name="serialNumber" type="text" class="easyui-validatebox" required="true" style="width: 130px;" value="" validType="midLength[0,50]" invalidMessage="50个字符之间!"/> </li>';
        html += '<li>起用日期:<input id="enableDate1" name="enableDate" type="text" class="easyui-datebox" required="true" style="width: 150px;"  validType="date" value="" data-options="formatter:ww4,parser:w4"/> </li>';
        html += '<li>下次检验日期:<input id="nextTestDate1" name="nextTestDate" type="text" class="easyui-datebox" required="true" style="width: 150px;" validType="date" value="" data-options="formatter:ww4,parser:w4"/> </li>';
        html += '<li>制造单位:<input id="makeCompany1" name="makeCompany" type="text" class="easyui-validatebox" required="true" style="width: 130px;" value="" validType="midLength[0,100]" invalidMessage="100个字符之间!"/> </li>';
        html += '<li>   <a id="query" href="javascript:void(0);" onclick="addLineJs()" class="easyui-linkbutton" iconCls="icon-add" style="vertical-align: middle;">添加</a> </li>';
        html += '</ul>';
        html2 += html;

        $("#append").empty();
        $("#append").append(html2);
        var tagobj = $('#append');
        $.parser.parse(tagobj);

    }

</script>



提供的引用内容中未提及 up - waterfall 触底加载后左右两侧出现空白问题的解决办法。不过可以从通用的瀑布流空白问题解决思路来考虑: - **检查数据加载逻辑**:确保触底加载时新数据能够正确添加到瀑布流组件的数据列表中,避免数据丢失或重复添加。以 vue - waterfall2 为例,在 `loadmore` 方法中正确处理新数据的拼接。 ```javascript methods: { loadmore() { // 模拟从后端获取新数据 const newData = getNewDataFromBackend(); this.list = this.list.concat(newData); } } ``` - **检查图片加载情况**:如果瀑布流中包含图片,要确保图片正确加载,并且在图片加载完成后重新计算布局。可以使用图片的 `@load` 事件,在图片加载完成后调用组件的重新布局方法。 ```vue <template> <img :src="item.src" @load="imageLoaded"> </template> <script> export default { methods: { imageLoaded() { // 调用组件的重新布局方法 this.$refs.waterfallComponent.refreshLayout(); } } } </script> ``` - **调整组件配置**:查看组件是否有相关的配置项可以调整列间距、边距等。不同的瀑布流组件配置项不同,需要参考具体组件的文档。例如在 vue - waterfall2 中,可以尝试调整列间距配置。 ```vue <vue-waterfall2 :list="list" :column-gap="10"> <!-- 瀑布流内容 --> </vue-waterfall2> ``` - **检查样式问题**:确保瀑布流组件的外层容器和内部元素的样式设置正确,没有额外的边距或浮动影响布局。可以通过浏览器开发者工具检查元素的样式和布局情况。 ```css .waterfall-container { margin: 0; padding: 0; } .waterfall-item { float: left; box-sizing: border-box; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值