问题提出:在进行页面书写的时候,有时候需要进行动态页面拼接,在动态拼接的时候,涉及到函数的调用,函数的传值可能是HTML标签,或者含有json的标签,这样在传值时就有可能出现问题,由于”“的存在,html会对其进行解析,把不该显示的元素进行了显示,这里提出一种解决思路。

如上图所示,我的detail变量和poet变量都是从服务器上获取的数据,其中poet为字符串,detail为json格式数据,这里对它进行了组装,组装成一个名为poetinfo的JSON数组,detail中含有了大量的html标签,其形式如下图所示,linkhtml是我需要动态拼接的组件,这里调用了一个函数为NewView(),这里需要将poetinfo的JSON传入NewView函数中使用。

开始的时候想的是直接将JSON作为NewView的参数写入写法为:

  linkHtml = "<div style='text-align:center'>" + "<a id=\"" + poet +
                 "\" href='javascript: NewView(\"" +
                 poetinfo +"\")' class='expand'+v.poetname +"</a>" + "<span style='color:blue;font-size:7px'>" + v.year + "</span>" + "</div>";

如果不用字符串形式,传过去的JSON将变为形为”[object object]“的字符串,如果提前使用了JSON.Stringify()函数,再进行传出,则会出现这里的值出现在div容器中,这是因为再detail中有引号,打乱了原本的标签结构。

这里有两种解决思路,第一种是将从服务器获取的数据全部转存到一个JSON,然后在每次遍历时设置一个索引,通过数字索引访问JSON对象,这种方法不够直观,并且索引的计算和数据的储存过大。

这里提出一种想法,方便在写动态拼接大量标签的网页时传值的方法,同时适用的场景还可以是,在我们使用JS的时候,有时候需要从服务器获取数据,为了减小服务器压力,不每次都从服务器调用数据,我们可以采用利用标签属性存值的方式进行储存和调用。

问题解决:

  • 将JSON储存在某一个标签的某一个属性中,在储存的时候为了不破坏结构,可以先对其进行编码,编码的方法,JS自带的有window.btoa()方法和网页中使用的encodeURIComponent()方法,第一种方法创建一个 base-64 编码的字符串,使用 “A-Z”, “a-z”, “0-9”, “+”, “/” 和 “=” 字符来编码字符串,第二个就是网页中使用的URL编码,这样就可以进行包装不破坏拼接标签的结构

  • 在编码前需要将其转化为字符串类型也就是使用JSON.stringify(),总的代码为encodeURIComponent(JSON.stringify(poetinfo)),然后将其存放在一个标签中,并用一个值来给这个标签设置id属性。

  • 在传值的时候将标签的id传出去,方便DOM操作,在其他函数调用时,可以通过id进行DOM操作,获取DOM属性,获取的方法可以是原生的Document.getelementById("id").getAttribute("名称"),也可以采用Jequry的$("#id").attr("属性名称")

  • 然后获取到这个属性后,先进行解码,然后再使用JSON.prase()就可以获取原来的JSON数据了,使用btoa加密的代码,解码方式为window.atob(),使用URL加密的解密方法为decodeURIComponent(),综合代码为JSON.parse(decodeURIComponent($('#' + poet).attr("poetinfo")));

JS传值与应用的更多相关文章

  1. JS传值中文乱码解决方案

    JS传值中文乱码解决方案 一.相关知识 1,Java相关类: (1)java.net.URLDecoder类 HTML格式解码的实用工具类,有一个静态方法:public static  String ...

  2. JS 传值 传址

    在JS中,有两种不同的方式可以操作数据的值,这两种技术分别叫做 传值 和 传址. 传值:在赋值过程中,首先对值进行了一份拷贝,而后将这份拷贝存储到一个变量.对象属性或数组元素中.拷贝的值和原始的值是完 ...

  3. JS传值和传引用

    之前看<javascript高级程序设计>时就遇到过一个问题,就是函数传参的问题,书上说是按值传递,而非按引用传递.很多人都会认为js里面有两种传值方式,一种是复制,另一种是数组.对象等按 ...

  4. 通过js获取UserAgent写入数据库 js传值至php

    借助cookie,cookie是js和php互相传值的纽带.

  5. 再谈js传值和传址

    js的传值和传址还是真绕,前回文说道 1.值类型是传值的 2.对象和数组是传址的 这两点通过例子的到了证实 然而还有一种情况没有讨论 即 函数的参数的传值和传址 通过实验,在函数中用一个新对象去覆盖传 ...

  6. Flask向模板中JS传值简便方式

    后台传值: return render_template('statistics/numberofuserlogin/login_number.html', result_json = json.du ...

  7. js传值

    //传值$('.choose li').click(function(){    //alert('z');     $("#address").empty().prepend($ ...

  8. web后台获取不到session中的值(loading sessions from persistent storage),后改用JS传值

    线上的程序似乎从session中取不到domain数据,重启了一下tomcat查看log日志发现,居然有报错.错误信息如下 22-Sep-2016 00:52:16.562 SEVERE [local ...

  9. 也谈js传值和传址

    通常的认识就是基本的数值元素是传值,对象等复杂结构传址,无需争论,一试便知. 首先是数值 var a = 1 var b = a a = 2 console.log(a) console.log(b) ...

  10. js传值到后台乱码问题

    1.前台js的路径 var addurl1="ldcOrderController.do?goods&orderGoodsExtra="+encodeURI(encodeU ...

随机推荐

  1. 分步骤讲解Deployment故障排除

    背景假设 当你希望在Kubernetes中部署应用程序时,你通常会定义三个组件: 一个Deployment - 这是一份用于创建你的应用程序的Pod副本的"食谱": 一个Servi ...

  2. 文档的CURD

    Index方式,需要指定ID 如果ID不存在,创建新的文档,状态是created 如果ID存在,会先删除现有ID的文档,然后创建一个新文档,ID数加1,状态是updated PUT test/_doc ...

  3. nsis插件nsisSlideshow.dll更新

    更新至1.7版本,作者wiz0u已解决关于ie9的兼容问题.Good 下载地址: http://wiz0u.free.fr/prog/nsisSlideshow/latest.php

  4. [题解] Codeforces 1349 D Slime and Biscuits 概率,推式子,DP,解方程

    题目 神题.很多东西都不知道是怎么凑出来的,随意设置几个变量,之间就产生了密切的关系.下次碰到这种题应该还是不会做罢. 令\(E_x\)为最后结束时所有的饼干都在第x个人手中的概率*时间的和.\(an ...

  5. P7361 「JZOI-1」拜神 (字符串)

    题意: 给一个串,\(Q\) 次询问区间 \([l,r]\) 中至少出现两次的子串的最大长度. 写LCT是什么东东 以下做法很经典: 先求出 SA 以及 height 数组,然后按 height 从大 ...

  6. CentOS 7.9 安装 redis-6.2.0

    一.CentOS 7.9 安装 redis-6.2.0 1 下载地址:https://download.redis.io/releases/redis-6.2.0.tar.gz 2 安装gcc来进行编 ...

  7. python基础-较复杂数据类型预览

    1.初识列表   列表就是队列:   列表是一种有序的,且内容可重复的数据类型:   用list代表列表,也可以用list()定义一个列表,同时定义列表可以直接使用 [ ]:   python中列表是 ...

  8. vue路由守卫用于登录验证权限拦截

    vue路由守卫用于登录验证权限拦截 vue路由守卫 - 全局(router.beforeEach((to, from, next) =>来判断登录和路由跳转状态) 主要方法: to:进入到哪个路 ...

  9. centos7搭建安装loki、promtail、Grafana日志系统

    loki.promtail.Grafana安装包 链接:https://pan.baidu.com/s/1vkSa_KYrXM0UEI8i42KdaA 提取码:4d4q 如果安装失败或者下载速度慢可以 ...

  10. 分享个好东西两行前端代码搞定bilibili链接转视频!

    只需要在您的要解析B站视频的页面的</body>前面加上下面两行代码即可,脚本会在客户端浏览器里解析container所匹配到的容器里的B站超链接 (如果不是外围有a标签的超链接只是纯粹的 ...