多层引号问题
[文章作者:叶歆昊 最后修改:2010-07-19 转载请注明原文链接:http://littz.com/multi-quote-problem.html]
刚在写这个Loading的时候,出现了关于javascript多层引号的问题,想想这个解决方案应该也适用于C、PHP、JAVA等程序语言需要多层引用的情况。
直接多层引号错误的原因:对于英文的标点符号而言,引号只有 ” 和 ‘ 两种,也就是说默认的情况只能嵌套两层引用,即使用 “abc’def’ghi” 这样的形式,如果要三层引用,那我们也许会写成这样 “abc’def”ghi”jkl’mno” ,可能我们最初设计的时候想把它看成ghi在最里层引用,def和jkl在外面一层,abc和mno在最外层。但是这个有歧义,程序的解析器会根据引号的就近原则认为 abc’def 是一层的,然后 ghi是在引号外,jkl’mno又是和abc’def并列的一个引用。
下面这个例子能很好的显示原因,代码高亮。
document.write('<div id="loader_container"><div id="loader"><div align="center">页面加载中……<a href="javascript:close1('loader_container');">关闭</a></div><div align="center"><img src="/images/loading.gif" alt="loading" /></div></div></div>');
function remove_loading() {
var targelem = document.getElementById('loader_container');
targelem.style.display='none';
targelem.style.visibility='hidden';
}
正确的写法应该是这样的,在两层引用的时候,我们可以用双引号”和单引号区别,在超过两层引用的时候就要使用转义,即在引号前加 \ ,变成\’,如果还要更多层,可以用多次转义\\’,\\\’ 这样的
document.write('<div id="loader_container"><div id="loader"><div align="center">页面加载中……<a href="javascript:close1(\'loader_container\');">关闭</a></div><div align="center"><img src="/images/loading.gif" alt="loading" /></div></div></div>');
function remove_loading() {
var targelem = document.getElementById('loader_container');
targelem.style.display='none';
targelem.style.visibility='hidden';
}