我在为Hexo写一个主题。
获取博文的内容(用markdown语法写的):var blogStr =<p>我是p</p>'
Hexo的文章模板页(用jade/pug写的):
-str = '<p>我是新的p</p>'
div#articleDiv #{str}
页面显示:
我期待的是就像 innerHTML 属性那样,传入的有标签名的话,浏览器会分析然后相应地做处理,而不是这样直接全部用字符串显示出来。
试过在jade/pug模板里用 document.cerete('div').innerHTML = str
报错:
Cannot read property 'createElement' of undefined
自问自答:
本来以为是Hexo后端的问题,到后来灵机一动,发现可能问题出在了jade/pug上。专门做了个测试,果然是jade的事。所以就提问了上面描述的问题。
然后我搜索一番无果后,想着还是自己解决吧。然后研究jade/pug源码和编译后的html代码,发现了问题:
jade:
编译后的html:
发现了问题没有?
就是< 和 > 被转义了.... 问题就出在这里!
jade文档里提到了如果你想不转义的话,用 !=
所以jade这么改:
就ok了。
页面显示:
和预想的效果一样。
PS:不转义的话,有安全上的风险,需要注意。