实现here document的一些副产品
近日打算利用注释实现here document,可惜不是这个浏览器就是那个浏览器给我制造麻烦。这次是火狐,它为了追求解析速度,做了一个作弊的特性,把javascript中的注释都去掉了!见下面实验:
考虑到压缩时会去掉注释,这是更健壮的版本:
经测试,也只有FF支持这混帐的特性。那么我们就集中精力兼容FF吧,这是外国人给出一个解决方案,利用E4X。
var string = (<r><![CDATA[ The text string goes here. Since this is a XML CDATA section, stuff like <> work fine too, even if definitely invalid XML. ]]></r>).toString(); |
接着下来要做的事是:检测浏览器是否支持E4X!
正如Douglas Crockford大神在Qcon里所说,New syntax is useless if you must support older browsers.。
New syntax === syntax errors
为了防止其编译期的致命错误,我们只有使用eval,但对于大段的代码这是非法不妥的,因此E4X方案给我抛弃了。不过,最后还是给我找到解决方安案了……
ぉまけ♪ 我的方法功能预览:
window.onload = function (){ var xml = dom.here( 'EOS' , new Error /* <<EOS <?xml version="1.0" encoding="ISO8859-1" ?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </CATALOG> EOS */ ) var xlt = dom.here( "xslt" , new Error /* <<xslt <?xml version='1.0'?> <xsl:stylesheet version="1.0" > <xsl:output method='html' version='1.0' encoding='GB2312' indent='yes'/> <xsl:template match="/"> <html> <body> <table border="2" > <tr bgcolor="yellow"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="CATALOG/CD"> <tr> <td><xsl:value-of select="TITLE"/></td> <td><xsl:value-of select="ARTIST"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> xslt */ ) //将注释中的XML字段转换为一个XML文档! var xmldom = dom.xml(xml); //生成一个XML文档的包裹对象 var xltdom = dom.xml(xlt).xml //生成一个XSLT文档 var result = xmldom.toDocument(xltdom) //转换一个HTML文档 document.write((dom.xml.serialize(result))) //写入当前文档 |
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码


机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述