js中的引号嵌套问题

12 篇文章 0 订阅
11 篇文章 0 订阅
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <h3>单引号</h3>
    <div id="single_quotes"></div>
    <hr/>
    <h3>双引号</h3>
    <div id="double_quotes"></div>
    <h3>打印区域</h3>
    <div id="print_box"></div>
  </body>
  <script type="text/javascript" src="jquery-3.0.0.min.js"></script>
  <script type="text/javascript">
    $(function(){
      oneLayerNesting();  //一层嵌套
      twoLayerNesting();  //两层嵌套
      threeLayerNesting();  //三层嵌套
      fourLayerNesting();  //四层嵌套
    });

    function oneLayerNesting(){
      $("#single_quotes").append('<input /><br/>');
      $("#double_quotes").append("<input /><br/>");
    }

    function twoLayerNesting(){
      $("#single_quotes").append('<input value="两层嵌套" /><br/>');
      $("#double_quotes").append("<input value='两层嵌套' /><br/>");
    }

    function threeLayerNesting(){
      var value = "三层嵌套";
      $("#single_quotes").append('<input value="三层嵌套-错误例子-1" onclick="printValue('+value+');" />');/*错误例子-1-点击报错:ReferenceError: \u4E09\u5C42\u5D4C\u5957 is not defined*/
      $("#double_quotes").append("<input value='三层嵌套-错误例子-1' onclick='printValue("+value+");' />");/*错误例子-1-点击报错:ReferenceError: \u4E09\u5C42\u5D4C\u5957 is not defined*/

      $("#single_quotes").append('<input value="三层嵌套-错误例子-2" onclick="printValue("'+value+'");" />');/*错误例子-2-显示错误:<input value="三层嵌套" onclick="printValue(" 三层嵌套");"="">*/
      $("#double_quotes").append("<input value='三层嵌套-错误例子-2' onclick='printValue('"+value+"');' />");/*错误例子-2-显示错误:<input value="三层嵌套" onclick="printValue(" 三层嵌套");"="">*/

      $("#single_quotes").append('<input value="三层嵌套-错误例子-3" onclick="printValue(\"'+value+'\");" />');/*错误例子-3-显示错误:<input value="三层嵌套" onclick="printValue(" 三层嵌套");"="">*/
      $("#double_quotes").append("<input value='三层嵌套-错误例子-3' onclick='printValue(\'"+value+"\');' />");/*错误例子-3-显示错误:<input value="三层嵌套" onclick="printValue(" 三层嵌套");"="">*/

      $("#single_quotes").append('<input value="三层嵌套-错误例子-4" onclick="printHtml(\"<input/>\");" />');/*错误例子-4-显示错误:<input value="三层嵌套-错误例子-4" onclick="printHtml(" <input="">*/
      $("#double_quotes").append("<input value='三层嵌套-错误例子-4' onclick='printHtml(\'<input/>\,);' />");/*错误例子-4-显示错误:<input value="三层嵌套-错误例子-4" onclick="printHtml(" <input="">*/

      $("#single_quotes").append('<input value="三层嵌套-正确例子-1" onclick="printValue(\''+value+'\');" />');/*正确例子-1*/
      $("#double_quotes").append("<input value='三层嵌套-正确例子-1' onclick='printValue(\""+value+"\");' />");/*正确例子-1*/

      $("#single_quotes").append('<input value="三层嵌套-正确例子-2" onclick="printHtml(\'<input/>\');" /><br/>');/*正确例子-2*/
      $("#double_quotes").append("<input value='三层嵌套-正确例子-2' onclick='printHtml(\"<input/>\");' /><br/>");/*正确例子-2*/
    }

    function fourLayerNesting(){
      $("#single_quotes").append('<input value="四层嵌套-错误例子-1" onclick="printHtml(\'<input value=\"四层嵌套\"/>\');" />');/*错误例子-1-显示错误:<input value="四层嵌套" onclick="printHtml('<input value=" 四层嵌套"="">*/
      $("#double_quotes").append("<input value='四层嵌套-错误例子-1' onclick='printHtml(\"<input value=\'四层嵌套\'/>\");' />");/*错误例子-1-显示错误:<input value="四层嵌套" onclick="printHtml('<input value=" 四层嵌套"="">*/

      //&apos;是单引号的转义符,&quot;是双引号的转义符
      $("#single_quotes").append('<input value="四层嵌套-正确例子" onclick="printHtml(\'<input value=&quot;四层嵌套-单引号&quot;/>\');" /><br/>');/*正确例子*/
      $("#double_quotes").append("<input value='四层嵌套-正确例子' onclick='printHtml(\"<input value=&apos;四层嵌套-双引号&apos;/>\");' /><br/>");/*正确例子*/
    }

    function printHtml(html){
      $("#print_box").append(html);
    }

    function printValue(value){
      console.log("value="+value);
    }
  </script>
</html>

通过以上运行结果可知,在js中的引号嵌套时单引号和双引号是交替使用的,基本规律如下(<=4层):

-   单引号:' " \' &quot; 单引号 &quot; \' " '
-   双引号:" ' \" &apos; 双引号 &apos; \" ' "

当然对于五层以上的嵌套目前还没有什么好的解决方案,不过4层嵌套已经可以解决绝大部分的应用场景了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值