这是一篇比较简单文章,主要是用于技术备忘。
这里解决的主要问题是,后台需要拼接html字符串,在html字符串中会有引号包含单引号的情况,尝试了很久,才知道尝试出结果:
sb.append("data-rules='{selectRequired:[true,'" + "#sl" + bo.getKey() + "']}' ");
因为JAVA中双引号是代表字符串定义,双引号中可以再包含单引号。但是,如果我们如下写法
sb.append("data-rules='{selectRequired:[true,'" + "#sl" + bo.getKey() + "']}' ");
浏览器的解析结果是
data-rules="{selectRequired:[true, " #slalias4']}'
明显不对,我们需要的是data-rules="{selectRequired:[true, '#slalias4']} "。
换个思考的方式,我们是将字符串传递给浏览器,最终浏览器会对html的引号重新解析,所以,我们应该考虑使用html的转义才对。所以,使用'就可以解决问题了。再试探一下这个想法是不是对的,我们修改一下语句如下:
sb.append("data-rules="{selectRequired:[true,'" + "#sl" + bo.getKey() + "']}" ");
啊哈,居然不对
data-rules=""{selectRequired:[true,"'#slalias4']}"=""
打出JAVA的拼接结果看看,
data-rules="{selectRequired:[true, '#slalias4']}"/><span class='icon-delelte-input'>
符合我们的预想,在String中是单引号的返回的还是单引号。但是浏览器解析的时候,会先把"和'组合在一起。当前看来,只能使用第一种形式。具体原因有待以后考证。
备注:还有一种可行性,就是尽量避免直接使用字符串拼接html字符串,维护性和扩张性都不强,而且类似本文这种情况,不便做调试和修改。可以采用一些模板工具,比如velocity或者freemaker来解决这一的问题。