zoukankan      html  css  js  c++  java
  • 拼接时代+动态创建时代+数据绑定时代

    拼接时代

    静态的页面换成动态的数据,拼接方法其实是必须的

    直接上例子看:

     1 this.images=[//json格式的数据 必须双引号 必须键值对形式
     2             {small:'../images/s11.jpg',big:'../images/s11.jpg'},
     3             {small:'../images/s12.jpg',big:'../images/s12.jpg'},
     4             {small:'../images/s13.jpg',big:'../images/s13.jpg'}
     5         ]
     6 
     7 bindDOMImageOld:function(){//数据拼接的基本方式(基本都是数组形式的)
     8         var str=''
     9         for(var i= 0,len=this.images.length;i<len;i++) {
    10             str+='<li>'
    11                 str+='<img class="etalage_thumb_image" src="'+ this.images[i].small+'" class="img-responsive" />'
    12                 str+='<img class="etalage_source_image" src="'+ this.images[i].small+'" class="img-responsive" />'
    13             str+='</li>'
    14         }
    15         $('#etalage').html(str)
     1         bindDom:function(dom){
     2 
     3             var str = ''
     4             str+='<h1 id="pname">'+this.name+'</h1>'
     5             str+='<div id="pdes">'+this.description+'</div>'
     6             str+='<div >已售:<strong id="psales">'+this.sales+'</strong></div>'
     7             str+=' <div>原价:<strong id="pprice">'+this.price+'</strong>元</div>'
     8             str+='<div>优惠价:<strong id="pyouhui">'+this.youhuijia+'</strong>元</div>'
     9             str+='<div>折扣:<strong id="pzhekou">'+this.zhekou+'</strong>折</div>'
    10             dom.innerHTML = str;
    11         },

    拼接时代基本就是这样,这是最常见的一种方式;

    动态创建时代

     动态的创建标签也是一种很常见,在业务逻辑中也是必须的,比如登陆..

     1 function noLogin(){//这种原生方法,略显臃肿
     2 
     3         var loginlink = document.createElement("a");
     4         loginlink.setAttribute("id", "login");//设置属性
     5         loginlink.setAttribute("name", "login");//设置属性
     6         loginlink.setAttribute("class", "link");//设置class
     7         loginlink.style.color="green";//设置样式
     8         loginlink.href = ''; //赋值超链接网址
     9         loginlink.innerHTML = '登录'; //超链接显示的文字内容
    10 
    11 
    12 
    13         var rlink = document.createElement("a");
    14         rlink.setAttribute("id", "register");//设置属性
    15         rlink.setAttribute("name", "register");//设置属性
    16         rlink.setAttribute("class", "link");//设置class
    17         rlink.href = ''; //赋值超链接网址
    18         rlink.innerHTML = '注册'; //超链接显示的文字内容
    19 
    20 
    21 //        添加到div中
    22         var span = document.getElementById("span");
    23         span.appendChild(loginlink);//添加到div元素中
    24         span.appendChild(rlink);//添加到div元素中
    25     };
    1  //    第二种方式  innerHTML
    2     function noLogin2(){
    4         var span = document.getElementById("span");
    5         span.innerHTML = "<a href='' id='login' name='login' class='link'>登录</a><a href='' id='register' class='link'>注册</a>";
    6 
    7     };

    jQuery append() 方法

    jQuery append() 方法在被选元素的结尾插入内容。

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <script src="/jquery/jquery-1.11.1.min.js">
     5 </script>
     6 <script>
     7 $(document).ready(function(){
     8   $("#btn1").click(function(){
     9     $("p").append(" <b>Appended text</b>.");
    10   });
    11 
    12   $("#btn2").click(function(){
    13     $("ol").append("<li>Appended item</li>");
    14   });
    15 });
    16 </script>
    17 </head>
    18 
    19 <body>
    20 <p>This is a paragraph.</p>
    21 <p>This is another paragraph.</p>
    22 <ol>
    23 <li>List item 1</li>
    24 <li>List item 2</li>
    25 <li>List item 3</li>
    26 </ol>
    27 <button id="btn1">追加文本</button>
    28 <button id="btn2">追加列表项</button>
    29 </body>
    30 </html>
    View Code

    jQuery prepend() 方法

    jQuery prepend() 方法在被选元素的开头插入内容。

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <script src="/jquery/jquery-1.11.1.min.js"></script>
     5 <script>
     6 $(document).ready(function(){
     7   $("#btn1").click(function(){
     8     $("p").prepend("<b>Prepended text</b>. ");
     9   });
    10   $("#btn2").click(function(){
    11     $("ol").prepend("<li>Prepended item</li>");
    12   });
    13 });
    14 </script>
    15 </head>
    16 <body>
    17 
    18 <p>This is a paragraph.</p>
    19 <p>This is another paragraph.</p>
    20 <ol>
    21 <li>List item 1</li>
    22 <li>List item 2</li>
    23 <li>List item 3</li>
    24 </ol>
    25 
    26 <button id="btn1">添加文本</button>
    27 <button id="btn2">添加列表项</button>
    28 
    29 </body>
    30 </html>
    View Code
     1 <script>
     2 function appendText()
     3 {
     4 var txt1="<p>Text.</p>";              // 以 HTML 创建新元素
     5 var txt2=$("<p></p>").text("Text.");  // 以 jQuery 创建新元素
     6 var txt3=document.createElement("p");
     7 txt3.innerHTML="Text.";               // 通过 DOM 来创建文本
     8 $("body").append(txt1,txt2,txt3);        // 追加新元素
     9 }
    10 </script>

    jQuery after() 和 before() 方法

    jQuery after() 方法在被选元素之后插入内容。

    jQuery before() 方法在被选元素之前插入内容。

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <script src="/jquery/jquery-1.11.1.min.js"></script>
     5 <script>
     6 function afterText()
     7 {
     8 var txt1="<b>I </b>";                    // 以 HTML 创建元素
     9 var txt2=$("<i></i>").text("love ");     // 通过 jQuery 创建元素
    10 var txt3=document.createElement("big");  // 通过 DOM 创建元素
    11 txt3.innerHTML="jQuery!";
    12 $("img").after(txt1,txt2,txt3);          // 在 img 之后插入新元素
    13 }
    14 </script>
    15 </head>
    16 <body>
    17 
    18 <img src="/i/eg_w3school.gif" alt="W3School Logo" />
    19 <br><br>
    20 <button onclick="afterText()">在图片后面添加文本</button>
    21 
    22 </body>
    23 </html>
    View Code

    数据绑定时代

    //arttemplate语法:返回拼接好并绑定好的数据

    模板的方式只是多一种数据绑定的方式,使数据绑定更加简便;

    1:逗逗加加方式

     1     bindDOMImageOld:function(){
     2         var str=''
     3         for(var i= 0,len=this.images.length;i<len;i++) {
     4             str+='<li>'
     5                 str+='<img class="etalage_thumb_image" src="'+ this.images[i].small+'" class="img-responsive" />'
     6                 str+='<img class="etalage_source_image" src="'+ this.images[i].small+'" class="img-responsive" />'
     7             str+='</li>'
     8         }
     9         $('#etalage').html(str)
    10 //这就是在拼接中添加数据绑定的方式
    11 //采用的便是逗逗加加的方式

    2:formateString方式

    1 //简单的数据绑定formateString
    2     formateString:function(str, data){
    3     return str.replace(/@((w+))/g, function(match, key){
    4         return typeof data[key] === "undefined" ? '' : data[key]});
    5 },

    //可以和上面的方式比较

     1  bindDOMImage:function(){
     2         /*无需豆豆加加*/
     3         var str=''
     4         var html=''
     5         html+='<li>'
     6         html+='<img class="etalage_thumb_image" src="@(small)" class="img-responsive" />'
     7         html+='<img class="etalage_source_image" src="@(big)" class="img-responsive" />'
     8         html+='</li>'
     9 
    10         for(var i= 0,len=this.images.length;i<len;i++) {
    11             str+= $$.formateString(html,this.images[i])
    12         }
    13         $('#etalage').html(str)

    3:artTemplate方式

    template.js (简洁语法版, 2.7kb)

    辅助绑定数据的一种方式;

    1     //arttemplate语法
    2     //封装成一个函数
    3     bindTemplate:function (tempalteId,data){
    4     var html = template(tempalteId, data);
    5     return html;
    6     }

    栗子:

     1     <script src='template.js'></script>
     2     <script src='index.js'></script>
     3 
     4 
     5 <div id='mydiv'></div>
     6 
     7 <!--模板王者演示-->//专门把拼接的数据 放到script 中
     8 <script id="arttemplate" type="text/html">
     9     <h2>{{name}}</h2>
    10     <ul>
    11         {{each films}}
    12             <li>
    13                 <strong>电影名称:</strong>{{$value.title}}<br>
    14                 <strong style='color:red'>导演</strong>{{$value.lead}}
    15                 <strong style='color:green'>主演:</strong>{{$value.role}}
    16             </li>
    17         {{/each}}
    18     </ul>
    19 </script>
    20 
    21 <script>
    22 
    23     //定义数据
    24     //var =[{},{},{}]
    25     /*1 必须是键值对
    26     2 必须双引号:key value都必须是双引号*/
    27 
    28     var data ={
    29         name:'电影列表',
    30         films:
    31                 [
    32                     {
    33                         title: '复仇者联盟2',
    34                         lead: '乔斯·韦登',
    35                         role: '小罗伯特·唐尼'
    36                     },
    37                     {
    38                         title: '速度与激情7',
    39                         lead: '范·迪塞尔',
    40                         role: '范·迪塞尔'
    41                     },
    42                     {
    43                         title: '左耳',
    44                         lead: '苏有朋',
    45                         role: '苏有朋'
    46                     },
    47                     {
    48                         title: '万物生长',
    49                         lead: '范冰冰',
    50                         role: '范冰冰 韩庚'
    51                     },
    52                     {
    53                         title: '盗墓笔记',
    54                         lead: '苏有朋',
    55                         role: '美人鱼'
    56                     }
    57                 ]
    58     }
    59     var html = $$.bindTemplate('arttemplate',data)
    60     $$.$id('mydiv').innerHTML = html
    61 </script>
     1 /**
     2  * 作者:传智播客教育集团
     3  * 开发日期:2015/12/25
     4  * 描述:通用框架
     5  * 版权所有 违者必究
     6  */
     7 
     8 //定义一个对象 - 名字是$
     9 var $$ = function() {};
    10 //第二种写法
    11 $$.prototype = {
    12     $id:function(id){
    13         return document.getElementById(id)
    14     },
    15     //去除左边空格
    16     ltrim:function(){
    17         return str.replace(/(^s*)/g,'');
    18     },
    19     //去除右边空格
    20     rtrim:function(){
    21         return str.replace(/(s*$)/g,'');
    22     },
    23     //去除空格
    24     trim:function(){
    25         return str.replace(/(^s*)|(s*$)/g, '');
    26     },
    27 
    28     //tab
    29     tab:function(id) {
    30     //如何获取某个父元素下面的子元素
    31     var box = document.getElementById(id);
    32     var spans = box.getElementsByTagName('span');
    33     var lis = box.getElementsByTagName('li');
    34 
    35 
    36     //两步走
    37     //第一步: 先把上半部分实现
    38     //群体绑定事件  -- 对所有的span绑定事件
    39     //群体绑定事件
    40     for(var i=0;i<spans.length;i++) {
    41         //相亲法则  -- 给男一号一个代号  --  怎么给 -- 自定义属性
    42         spans[i].index=i;
    43         spans[i].onmouseover = function() {
    44             //排他思想 --  将所有的span置为默认状态  --- 然后再将当前鼠标移上的span置为class -- select
    45             for(var i=0;i<spans.length;i++) {
    46                 spans[i].className='';
    47                 lis[i].className='';
    48             }
    49             this.className='select';
    50             lis[this.index].className='select';
    51         }
    52     }
    53 
    54 },
    55     //简单的数据绑定formateString
    56     formateString:function(str, data){
    57     return str.replace(/@((w+))/g, function(match, key){
    58         return typeof data[key] === "undefined" ? '' : data[key]});
    59 },
    60     //arttemplate语法
    61     //封装成一个函数
    62     bindTemplate:function (tempalteId,data){
    63     var html = template(tempalteId, data);
    64     return html;
    65     },
    66     artTemplate:function (str,data){
    67         var render = template.compile(str);
    68         return render(data)
    69     }
    70 }
    71 //在框架中实例化,这样外面使用的使用就不用实例化了
    72 $$ = new $$();
    View Code index.js

    下面的这种方式是在拼接的时候用的:

    仍然需要封装一下artTemplate:

    1     artTemplate:function (str,data){
    2         var render = template.compile(str);
    3         return render(data)
    4     }

    使用模板技术改造的案例:

     1     bindDOMImage:function(){
     2         var html=''
     3         console.log(this.images)
     4         html+='{{each images as value i}}'//value保存的是每一次遍历images的值
     5             html+='<li>'
     6                 html+='<img class="etalage_thumb_image" src="{{value.small}}" class="img-responsive" />'
     7                 html+='<img class="etalage_source_image" src="{{value.big}}" class="img-responsive" />'
     8             html+='</li>'
     9         html+='{{/each}}'
    10 
    11         $('#etalage').html($$.artTemplate(html,this))

    先到这里吧,以后再补充;

  • 相关阅读:
    [Linked List]Convert Sorted List to Binary Search Tree
    [Linked List]Reorder List
    [Linked List]Insertion Sort List
    解剖Nginx·模块开发篇(4)模块开发中的命名规则和模块加载与运行流程
    解剖Nginx·模块开发篇(3)ngx_http_hello_world_module 模块的基本函数实现
    解剖Nginx·模块开发篇(2)ngx_http_hello_world_module 模块基本结构定义
    解剖Nginx·模块开发篇(1)跑起你的 Hello World 模块!
    Nginx 源码完全注释(11)ngx_spinlock
    Nginx 源码完全注释(10)ngx_radix_tree
    Nginx源码完全注释(9)nginx.c: ngx_get_options
  • 原文地址:https://www.cnblogs.com/uiiu/p/5846959.html
Copyright © 2011-2022 走看看