美文网首页
VUE动态数据绑定(正则解析)

VUE动态数据绑定(正则解析)

作者: 爱忽悠的唐唐在晃悠 | 来源:发表于2018-02-07 10:25 被阅读505次

    我们需要有一个对象,将DOM节点和对应的数据一一映射起来。
    以此来达到修改DOM相关的任意一个属性的时候,只修改它所对应的节点。而不是去渲染更新整个DOM。

    <p>姓名:{{name}},年龄:{{age}}</p>
    

    p标签中的姓名:{{name}},年龄:{{age}}是一个文本节点。在进行节点对象构建时,需将这个文本节点拆分成多个,以此来达到精确匹配。举个栗子,上面的这个文本节点需要拆分成 [“姓名:”,“name”,"年龄",“age”].
    我们通过正则来实现这一需求。

    • 首先列举出JavaScript RegExp 对象中的几个方法:
    test()  //检索字符串中的指定值。返回值是 true 或 false。
    exec() // 检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
    compile()  //可以改变检索模式,也可以添加或删除第二个参数。
    
    • 具体代码如下。主要思路是通过RegExp对象的exec方法进行全文检索。
    <script type="text/javascript">
               // 姓名:{{user.name}},年龄:{{user.age}}
               var pendingText = "姓名:{{user.name}},年龄:{{user.age}}"
               function parseText(pendingText){
                   var collection=[];
                   var searchTxt="";
                   var targetTxt = "";
                   var stringLength=0,lastIndex=0,curIndex=0;
                   var reg =/\{\{(.+?)\}\}/g;
                   
                    if(!reg.test(pendingText)){
                       throw new Error("未匹配");
                    }else{
                       reg.lastIndex=0;
                     while( tempR = reg.exec(pendingText))
                       {
                         curIndex = reg.lastIndex;
                         searchTxt=tempR[0];
                         stringLength=searchTxt.length;
                         collection.push(pendingText.slice(lastIndex,curIndex-stringLength));
                         targetTxt=tempR[1];
                         collection.push(targetTxt);
                         lastIndex=curIndex;
                       }
                    }
                    console.log(collection);
               }
               parseText(pendingText);
           </script>
    

    相关文章

      网友评论

          本文标题:VUE动态数据绑定(正则解析)

          本文链接:https://www.haomeiwen.com/subject/fdhozxtx.html