在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  Java  HTML/ 想實現(xiàn)svg模板,怎么執(zhí)行三目運算語句?

想實現(xiàn)svg模板,怎么執(zhí)行三目運算語句?

問題詳述

  • 想要實現(xiàn)一個svg字符串中{{}}包裹的變量和語句自動替換的方法,如
<svg>{{a}}x{}={{a*b}}{{a?3:4}}</svg>

替換為1x2=2 3這樣的

實現(xiàn)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <div class="container">
      <svg>{{a}}x{}={{a*b}}{{a?3:4}}</svg>
    </div>
    <script type="text/javascript">
      var html = document.querySelector(".container")
      console.dir(html);
      var regExpStr=new RegExp("\n|\ ","g")
      var splitStr = new RegExp("{{|}}","g")
      html=html.textContent.replace(regExpStr,"");
      var arr=html.split(splitStr)//拆分svg字符串
      var options= {a:2,b:1}
      //若聲明為全局變量
      // var a=2,b=1;
      var tempArr=[];
      function foo(arr,options){
            for (item in arr){
                try{
                  tempArr.push(new Function("return "+arr[item]).apply(options))//可執(zhí)行的語句執(zhí)行后放入結(jié)果字符串
                }catch(e){
                  tempArr.push(arr[item])//非正常執(zhí)行的語句直接原樣放進結(jié)果字符串
                }
            }
            return tempArr.join("")
      }
      var tempStr=foo(arr,options)
      console.log(tempStr);
    </script>
  </body>
</html>

存在的問題

  • 若a、b被聲明為全局變量,由于訪問全局變量無需this,可以直接解析變量和三目運算語句,不過顯然不能滿足要求

求助的方向

  • 若可以像全局變量一樣不使用this前綴調(diào)用參數(shù)options傳入的變量,是不是用構(gòu)造函數(shù)來寫?
  • 若可以在foo的作用域中重新聲明每個變量,類似這樣(當然這樣x就被作為變量名而非引用的變量名字符串了,怎么寫可以實現(xiàn))
for(x in this){var x = this[x];console.log(x)}
  • 或者哪位有更好的方向,請賜教。
回答
編輯回答
舊時光

不使用this調(diào)用參數(shù)的方式很簡單,with(參數(shù))即可
最終代碼為

function foo(arr,options){
            for (item in arr){
                try{
                  with(options){
                    tempArr.push(eval(arr[item]))
                  }
                }catch(e){
                  tempArr.push(arr[item])
                }
            }
            return tempArr.join("")
      }
2018年2月14日 16:19