js拼接html代码及传递参数爬坑

最近在做项目时,遇到了在js中拼接html代码,并且传递对象,挣扎了很久,记录我的爬坑之旅。

框架:ko(knockout.js)
背景:我要在外列表的行数据上添加一个下拉事件,效果如图(点击标题弹出一个下拉框:dropdown)
在这里插入图片描述由于用到的是ko框架,在pageGrid上实现这个效果有点棘手,在尝试过多种方案后,最后采用的是在js中拼接html代码来实现。代码实现如下:

{
                    headerText: "标题",
                    rowText: function (item) {
                        var html = [];
                        html.push("<li class='dropdown '> <a href='#' data-toggle='dropdown'>");
                        if (item.jjcdmc == '特急') {
                            html.push("<span class='tjicon'></span>&nbsp;<span style='font-size: 16px;'>" + item.rwmc + "</span>");
                        } else if (item.jjcdmc == '加急') {
                            html.push("<span class='jjicon'></span>&nbsp;<span style='font-size: 16px;'>" + item.rwmc + "</span>");
                        } else {
                            html.push("<span class='ybicon'></span>&nbsp;<span style='font-size: 16px;'>" + item.rwmc + "</span>");
                        }
                        if (item.rwzqList.length >= 1) {
                            var keys = {};
                            keys["rwbh"] = item.rwbh;
                            keys["ztdm"] = item.rwztdm;
                            for (var key in item.rwzqList) {
                                keys["rwzqbh"] = item.rwzqList[key].rwzqbh;
                                html.push("</a><div class='dropdown-menu dropdown-alerts userinfo-list' style='width: auto;'>");
                                html.push("<div class='tr'><a class='a' style='font-size: 16px;' href='javascript:void(0);' οnclick='new (require(\"taskSupervise/taskPublish/publish\"))().show(" + JSON.stringify(keys).replace(/\'/g, '"') + ")'><span>" + item.rwzqList[key].rwzqmc + "</span></a></div>"); //传递json对象
                                //html.push('<div class="tr"><a class="a" style="font-size: 16px;" href="javascript:void(0);" οnclick="new (require(\'taskSupervise/taskPublish/publish\'))().show(' + JSON.stringify(keys).replace(/\"/g, "'") + ')"><span>' + item.rwzqList[key].rwzqmc + '</span></a></div>');//传递json对象
                                // html.push('<div class="tr"><a class="a" style="font-size: 16px;" href="javascript:void(0);" οnclick="new (require(\'taskSupervise/taskPublish/publish\'))().show(\' ' + keys.rwbh + '\')"><span>' + item.rwzqList[key].rwzqmc + '</span></a></div>');
                                html.push("</div>");
                                html.push("</li>");
                            }
                        }
                        return html.join("");
                    },
                    isOperate: true,
                    key: "rwbh,rwztdm,rwzqbh",
                    callback: function (key, lzRow) {
                        var keys = key.split(',');
                        if (lzRow.Value().rwzqList.length < 1) {
                            key = {
                                rwbh: keys[0],
                                ztdm: keys[1],
                                rwzqbh: lzRow.Value().rwzqList.length == 0 ? "" : lzRow.Value().rwzqList[0].rwzqbh,
                            }
                            new Publish().show(key).then(function (p) {
                                if (p) {
                                    that.search();
                                }
                            });
                        } else {
                            return;
                        }

                    },
                    width: '100px',
                    place: 'left',
                    isHide: true,
                    hidCount: 15,
                },

标题这一列的代码块,在rowText中对其进行拼接,整体是个li标签,写法就和html没区别,需要注意的是在拼接完成返回时要加上 html.join("");否则会出现莫名的","

拼接完成后,在传参这块就遇到坑点了,寻常的data-bind绑定显然是不生效的,遂我就使用了onclick事件,在请求方法的时候是获取不到的,需要使用require导入依赖包。举个例子:require(\'taskSupervise/taskPublish/publish\') 使用转义符号来转义引号

对于参数传递也是如此,遇到的坑点大多都是格式要求不对引起的:
1.参数是int类型的可以直接传;
2.参数是字符串类型的,需要使用转义符号“\”转义:\' ' + keys.rwbh + '\'
3.参数是对象类型的不能直接传递,需要转换成字符串形式进行传递:
步骤:

  1. 现将对象序列化成字符串:JSON.stringify(json)
  2. 将双引号转义成单引号:replace(/"/g,"'")
  3. 将括号中的单引号除掉
  4. 方法中获到的就是json对象

控制台打印结果展示
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值