2021-04-19 jQuery 02

1.动态生成

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script src="./lib/jquery.js"></script>
    <input type="button" value="html添加" id="btn1" />
    <input type="button" value="添加" id="btn2" />
    <ul id="ua">
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
    </ul>
    <ul id="ub">
      <li>11</li>
      <li>22</li>
      <li>33</li>
      <li>44</li>
      <li>55</li>
    </ul>
  </body>
  <script>
/* 

    目标:动态生成元素
    jq 中有两种方式动态生成
    jq 对象.html(满足html语法格式的字符串)
    会覆盖旧的内容


    2.先创建,然后在添加
    var elements = $('标签')  然后可以添加属性

    jq对象.text() 非表单
    jq对象 .val() 表单

    添加属性
    jq 对象.attr(); 非表单
    jq 对象.prop()  开关属性 selected disable 

    添加元素 父元素jq对象.append (子元素的jq对象)
 */
    // 演示 html方法
    $('#btn1').on('click',function(){
      $('#ua').html('<li id="box">我是新来的</li>');
    })

    // 演示 先创建再添加
    $('#btn2').on("click",function(){
      // 先创建
      var li =$('<li>')
        // 操作元素内容
        // jq 对象.text(内容)
        li.text('大王叫我来巡山');
        // jq 对象.attr(属性名,属性值)  开关jq 对象.prop
        li.attr('id','ub-box');
        // 添加
        $('#ub').append(li);
    })





  </script>
</html>

2.动态生成小技巧

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- jq的理念: write less, do more -->
    <script src="./lib/jquery.js"></script>
  </body>
  <script>
/* 
   jq中的动态生成有很多的小技巧
   $(满足html语法格式的字符串)
   jq 对象.append(字符串|元素对象|jq对象)
   var elements =$('<div><p><a href="#">淘宝</a></p></div>');
   $('body').append(elements);
 */

   $('body').append('<div><p><a href="#">淘宝</a></p></div>');
  </script>
</html>

3.借来的数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<!--     
   1.打开的网站
   2.打开F12或者右键 检测元素 找到network
   3.先选中XHR分类
   4.刷新
   5.找数据
   6.选中任意一条--点开
   7.在Preview查看数据,在Response复制
   8.新建一个文件 名字叫***.json 把数据粘进去 然后格式化
   9.将后缀名json改为js 给数据赋值为一个变量 -->


</body>
</html>

4.模板字符串

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
 /*    
    ES6推出的新特性
        模板字符串
        固定样式

    1.中间可以换行
    2.可以解析变量和表达式
    `${变量}`
   ` ${表达式}`

 */
   var a = `李白斗酒诗百篇
    八月秋高风怒号
    卷我屋上三重茅
    `;

    console.log(a);

    var name='多纳泰罗';
    var age=2021;
    birther=2022;
    var str =  `你好,我叫${name},今年${age-birther}岁`;
    console.log(str);

</script>
</html>

5.箭头函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="button" value="按钮" id='btn'>
    <script src="./lib/jquery.js"></script>
</body>
<script>
    /* 
    箭头函数 (参数)=>{函数体}
    经常使用回调函数,使用传统的写法 function(){} 比较麻烦
    作用就是来简化回调函数

    1.本质还是一个函数
    2.还有更简单的写法
    如果只有一个参数 可以直接 参数=>{函数体}
    如果函数体只有一行  可以写 参数=>函数体
    可以有个参数 函数体只有一行
    ()=>函数体

    如果函数体只有一行 并且你还把{}省略了 那么默认返回 return不能写

    3.箭头函数的this不再是原来的this 如果函数里面要使用this 要想清楚是否是你想要的this 
    根据实际情况选择使用
    
    
    */
  
  var fn = ()=>{};
//   console.log(typeof fn);
// [].sort(function(a,b){
//     return a-b;
// });
// [].sort((a,b)=>{
//     return a-b;
// })

//省略{} 并返回
[].sort((a,b)=>a-b)

// 筛选数组中大于等于50的数
var arr = [100,52,48,24,99,75];
var temp = arr.filter(function(e){
        return e>=50;
})

var temp = arr.filter(e=>e>=50);
console.log(temp);
// $('#btn').on('click',function(){
//     console.log(this);
// })
$('#btn').on('click',()=>{
    console.log(this);
})
</script>
</html>

 

6.删除元素

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <input type="button" value="删除第一个" id="btn" />
    <input type="button" value="株连九族式删除" id="btn1" />
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
      <li>6</li>
      <li>7</li>
      <li>8</li>
      <li>9</li>
      <li>10</li>
    </ul>
    <script src="./lib/jquery.js"></script>
  </body>
  <script>
   
  //  目标:jq中删除元素 jq对象.jq对象.remove()

  //  获取jq对象
   var ul=$('ul');
   var lis=ul.children();

   $('#btn1').on('click',()=>{
    //  第一种写法:
    //  $('ul li:first-child').remove();

    //  第二种写法 通过下标为0
     ul.children().eq(0).remove();


    //  全删
     lis.remove();
   })
   </script>
</html>

 

7.罗窝窝首页

$(function () {


//==================================动态轮播图


    //动态生成轮播图
    //1.得到数据  数组
    // 2.遍历数组 生成一个符合html语法结构的字符串
    // 3.放在结构中
    var banners=banner.data;
    console.log(banners);
    html='';

    banners.forEach(function(e){
      html+=
      `
      <li data-id="0" class="show_image first" style="display: none;">
    <a href="./traveldetail.html?id=${e.refId}"
        class="show-pic">
        <img src="${e.coverUrl}"/></a>
         <a href="javascript:;" class="show-title dark">
        <div class="date"><span class="day">15</span>/Oct.2020</div>
        <h3>${e.title}</h3>
    </a>
</li>
      `
    })
    //   //放入结构中
      $('.show-image').html(html);

















      // =================点击小图出大图========================
      var current = 2;
      //因为图都是默认隐藏起来的 所以先显示一张图

      //获取右侧的小图
      var navs = $('.show-nav li');
       //    console.log(navs);
       // 获取轮播的大图
       var imgs = $('.show-image li');
    //    show如果被选元素已被隐藏,则显示这些元素:
       imgs.eq(current).show();
       // 给小图注册单击事件
       navs.on('click',function(){
       //    eq()得到第n个dom元素的jq对象
       imgs.eq(current).fadeOut(1000);
       // index() 方法返回指定元素相对于其他指定元素的 index 位置。
   
       // 这些元素可通过 jQuery 选择器或 DOM 元素来指定。
   
       // 注释:如果未找到元素,index() 将返回 -1。    
       // jq对象.index() 
       var index = $(this).index();
       // console.log(index);
       // 同步current 索引
       current = index;
       imgs.eq(current).fadeIn(1000);
   
       // 排他
       // navs.removeClass('active');
       // $(this).addClass('active');
   
       // jq有一个式可以得到某个元素所有兄弟    
       // jq对象.siblings()
       $(this).addClass('active').siblings().removeClass('active');
       //  链式编程
       })
      
   

       

      //=================================================  自动轮播
       // 实现自动轮播
       // 1.获取元素
       // 2.定时器
       // 3.把当前的图片淡出,下一张淡入
       setInterval(function(){
           // 当前的图片淡出
           imgs.eq(current).fadeOut(1000);
           current = ++current%imgs.length;
           imgs.eq(current).fadeIn(1000);
           // 处理边框
           navs.eq(current).addClass('active').siblings().removeClass('active');
       },2000)
});

 

 

8.攻略页面遍历

/* 
//==============================动态生成分类
1.得到数组
2.遍历 生成html
3.放到结构中
*/
var travel = strategyData.data;
var str = '<li class="on _j_tag"><a href="javascript:;">全部</a></li>';
travel.forEach(e=> {
    str += `<li data-tid="${e.id}" class="_j_tag"><a href="javascript:;">${e.name}</a></li>`;
});
//放在结构中

$('.filter-tag').html(str);










//===============================点击更多切换样式

//点击更多和手气 实际上就是切换一个extend
$('._j_trigger_btn').on('click',()=>{
    //第一次点的时候加上extend
    $('.filter-tag').toggleClass('extend');
    //改按钮的字 有extend 收起  没有更多
    // hasClass()用来判断有没有这个样式  如果有返回true
    // hasClass() 方法检查被选元素是否包含指定的 class。

// 语法
    if($('.filter-tag').hasClass('extend')){
        $('._j_trigger_btn').text('收起');
    }else{
        $('._j_trigger_btn').text('更多');
    }
})


//=================================点击具体分类,切换内容
/* 
点击攻略分类 切换内容 
1.获取元素  ul下的li
2.注册点击事件 
3,根据对应的分类  显示不同的内容
 */

 $('.filter-tag li').on('click',function(){
    //  根据分类的id进行分类  相同的id是一组
    var id = this.dataset.tid;
    if(id){
        // id 要和strategyList这个数据的themeId是相等的
        // var arr = strategyList.data.content.filter(e=>e.themeId ==id);
        var arr = strategyList.data.content.filter(function(){
            e.themeId ==id//返e的themeid等于id的值
        });

     
    }else{
        // 如果没有id  说明点的是全部
        var arr = strategyList.data.content.slice(0,10);
    }
    journey(arr);
 })
 function journey(arr){
    var str = '';
    arr.forEach(e=>str +=`<div class="item clearfix"><a href="/views/strategy/detail.html?id=${e.id}" target="_blank" class="_j_item"><div class="img"><img src="${e.coverUrl}"></div> <div class="detail"><h3>${e.title}</h3> <ul>
    ${e.summary}
</ul> <div class="extra"><span class="location"><i></i>${e.destName}</span> <span class="view"><i></i>${e.viewnum}</span></div></div></a></div>`);
console.log(str);
$('.guide-list').html(str);
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值