• day56——原生js绑定事件、jQuery简介及各个选择器、筛选器


    原生js绑定事件

    • 开关灯案例

      <head>
          <meta charset="UTF-8">
          <title>Title</title>
          <style>
              .c1 {
                   400px;
                  height:400px;
                  border-radius: 50%;
              }
              .bg_wheat {
                  background-color: wheat;
              }
              .bg_black {
                  background-color: black;
              }
          </style>
      </head>
      <body>
      <div class="c1 bg_wheat bg_black"></div>
      <button>开关</button>
      <script>
          let divEle = document.getElementsByClassName('c1')[0]
          let bntEle = document.getElementsByTagName('button')[0]
          bntEle.onclick = function () {   // 绑定点击事件
              divEle.classList.toggle('bg_black')   // 动态的修改div标签的类属性
          }
      
      </script>
      </body>
      

      .toggle('bg_black')有'bg_black'则删除该属性,显示原来的颜色,无则增加该属性,对原来的颜色进行覆盖,到达变色的效果。

    • input框获取/失去焦点案例

      <body>
      <input type="text" id="d1" value="给我整点内容可好!">
      <script>
          let inputEle = document.getElementById('d1')
           // 获取焦点事件
          inputEle.onfocus= function () {
              inputEle.value=''   //  点value就是获取,等号赋值就是设置
          }
           // 失去焦点事件
          inputEle.onblur= function () {
              inputEle.value='Hello world!'   // 给input标签重写赋值
          }
      </script>
      

      为便签设置默认值value='...',先查找到标签;给标签绑定获取焦点事件和失去焦点事件;鼠标点击input框,触发获取焦点事件,将文本清空;鼠标移开触发失去焦点事件,给value赋值一个文本,鼠标移开后显示该文本。

    • 实时展示当前事件

      <body>
      <input type="text" id="d1" style="display: block;height:50px;251px">
      <button id="d2">开始</button>
      <button id="d3">结束</button>
      <script>
          // 定义一个存储计时器的全局变量
          let t = null
          let inputEle = document.getElementById('d1')
          let startEle = document.getElementById('d2')
          let endEle = document.getElementById('d3')
          // 1 访问页面之后,将访问的时间展示到input框中
          // 2 动态的展示当前时间
          // 3 页面上加两个按钮 一个开始 一个结束
          function showTime(){
              let currentTime = new Date()
          inputEle.value=currentTime.toLocaleString();
          }
          startEle.onclick = function(){
               // 限制定时器只能开一个
              if(!t){
                  t = setInterval(showTime,1000)  // 如果不判断t是否为空就进行赋值的话,每点击一次就会开设一个定时器 而t只指代最后一个
              }
          }
          endEle.onclick = function(){
              clearInterval(t)  // 如果开设很多个计时器,那么只能清除一个计时器
              t=null   // 还应该将t重置为空
          }
      </script>
      </body>
      

      省市联动

      <body>
      <select name="" id="d1">
          <option value="" selected disabled>--请点击--</option>
      </select>
      <select name="" id="d2">
      </select>
      <script>
          let proEle = document.getElementById('d1')
          let cityEle = document.getElementById('d2')
          // 先模拟省市数据
          data = {
              "河北": ["廊坊", "邯郸",'唐山'],
              "北京": ["朝阳区", "海淀区",'昌平区'],
              "山东": ["威海市", "烟台市",'临沂市'],
              '上海':['浦东新区','静安区','黄浦区'],
              '深圳':['南山区','宝安区','福田区']
          };
           // 选for循环获取省
          for (let key in data){
              // 将省信息做成一个个option标签,添加到第一个select框中
              // 1 创建option标签
              let optEle = document.createElement('option')
              // 2 设置文本
              optEle.innerText= key
              // 3 设置值value
              optEle.value=key
              // 4 将创建的option标签添加到第一个select标签内
              proEle.append(optEle)
          }
          // 文本域变化事件,change事件
          proEle.onchange = function(){
              // 1 在每次选择省份后清空之前省份的市标签
              cityEle.innerHTML=''
              // 2 添加一个默认选中且不能操作的提示标签
              let sss = "<option disabled selected>请选择</option>"
              cityEle.innerHTML=sss
              // 3 获取当前选择的省份用一个变量接收
              let currentPro = proEle.value
              // 4 获取当前省份的市列表
              let currentCityList = data[currentPro]
              // 5 for循环所有的市,渲染到第二个select标签中
              for (let i=0;i<currentCityList.length;i++){
                  // 5.1 创建市标签
                  let optEle = document.createElement('option')
                  // 5.2 为市标签设置文本
                  optEle.innerText= currentCityList[i]
                  // 5.3 为市标签设置值value
                  optEle.value= currentCityList[i]
                  // 5.4 将创建的市option标签添加到第二个select标签内
                  cityEle.append(optEle)
              }
          }
      </script>
      </body>
      

    JQuery

    1)jQuery是一个轻量级(几十kb)的、兼容多浏览器的JavaScript库。

    2)jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“

    版本介绍

    • 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)
    • 2.x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日)
    • 3.x:不兼容IE678,只支持最新的浏览器。需要注意的是很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本。

    注意:jQuery在使用前一定要确认jQuery文件被导了。

    jQuery导入问题

    • 文件下载到本地,如何解决多个文件反复书写引入语句的代码

      可以借助pycharm自动初始化代码功能帮我们在创建HTML文件是自动添加引入代码

      步骤:

      点击File、点击Flie下面的settings打开设置窗口,在点击Editor编辑、找到file and code template、 第一个就是HTML文件,将导入代码添加到自动初始化代码中

    • 不想下载文件,可以直接引入jQuery提供的CDN服务(基于网络直接请求加载)

      """
      CDN:内容分发网络
      CDN:有免费的也有收费的
      前端免费的cdn网站:	bootcdn"""
      
      # 导入代码
      <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
      """不下载文件,用这样方式导入的前提是你的计算机必须要有网络""""""
      

    jQuery内容

    1. 选择器
    2. 筛选器
    3. 样式操作
    4. 文本操作
    5. 属性操作
    6. 文档处理
    7. 事件
    8. 动画效果
    9. 插件

    jQuery基本语法

    jQuery(选择器).action()
    # 简写,将jQuery用$符代替
    $(选择器).action()
    

    jQuery与js代码对比

    用原生的js代码改变p标签的文本颜色和用jQuery修改看谁跟简洁明了

    # 1 原生的js代码
    let pEle = document.getElementById('d1')  # 先要查找到标签
    pEle.stye.color = 'red'  # 再改样式,设置颜色
    
    # 2 用jQuery
    $('p').css('color','bule')  # 查找和设置在一行就能完成
    

    jQuery如何查找标签

    1.基本选择器

    基本选择器获得都是jQuery对象,本质也是数组

    # 1 id选择器
    $('#d1');
    # w.fn.init [div#d1]
    
    # 2 类选择器
    $('.c1');
    # w.fn.init [p.c1, prevObject: w.fn.init(1)]
    
    # 3 标签选择器
    $('span');
    """w.fn.init(3) [span, span, span, prevObject: w.fn.init(1)]0: span1: span2: spanlength: 3prevObject: w.fn.init [document]__proto__: Object(0)"""
    # 4 通用选择器(基本不用)
    $('*');
    """w.fn.init(15) [html, head, meta, title, meta, link, script, script, body, div#d1, span, p, span, p.c1, span, prevObject: w.fn.init(1)]"""
    

    jQuery对象与便签对象互相转换

    1)jQuery对象转标签对象

    加上索引取值,取到的就是标签对象,跟js查找标签获得的结果相同

    $('#d1')[0]
    # <div id=​"d1">​…​</div>​
    
    document.getElementById('d1')
    # <div id=​"d1">​…​</div>​
    
    1. 标签对象转jQuery对象

    参照python数据类型转换来记忆,int('111'),在标签对象外面套一层jQuery类:$(标签对象)

    let divEle = document.getElementById('d1');
    $(divEle);
    # w.fn.init [div#d1]
    

    注意:一定不要将两者弄混了, 一起jQuery对象的属性标签对象无法使用,同样标签对象的属性jQuery对象无法使用。

    组合选择器/分组与嵌套

    $('div')  # 拿所有的div标签
    # w.fn.init(2) [div#d1, div.c1, prevObject: w.fn.init(1)]
    $('div.c1')  # 拿class类中有c1的div标签
    """w.fn.init [div.c1, prevObject: w.fn.init(1)]0: div.c1length: 1prevObject: w.fn.init [document]__proto__: Object(0)"""
    $('div#d1')  # 拿id为d1的div标签
    w.fn.init [div#d1, prevObject: w.fn.init(1)]
    
               
    $('#d1,.c1,p')  # 并列+混用
    w.fn.init(3) [div#d1, p#d2, div.c1, prevObject: w.fn.init(1)]
                  
    # 嵌套                  
    $('div span')  # 后代
    # w.fn.init(3) [span, span, span, prevObject: w.fn.init(1)]
    $('div>span')  # 儿子
    # w.fn.init(2) [span, span, prevObject: w.fn.init(1)]
    $('div+span')  # 毗邻
    #w.fn.init [span, prevObject: w.fn.init(1)]
    $('div~span')  # 弟弟
    #w.fn.init(2) [span, span, prevObject: w.fn.init(1)]
    

    基本筛选器

    $('ul li') # 拿到所有的li
    """w.fn.init(10) [li, li, li, li, li, li, li.c1, li, li#d1, li, prevObject: w.fn.init(1)]"""
                   
    $('ul li:first')  # 拿第一个li(长子) 
    """w.fn.init [li, prevObject: w.fn.init(1)]0: lilength: 1prevObject: w.fn.init [document]__proto__: Object(0)"""
                   
    $('ul li:last')  # 拿最后一个(幼子)
    """w.fn.init [li, prevObject: w.fn.init(1)]0: lilength: 1prevObject: w.fn.init [document]__proto__: Object(0)"""
                   
    $('ul li:eq(2)')  # 放索引,拿索引为2的li
    """w.fn.init [li, prevObject: w.fn.init(1)]0: lilength: 1prevObject: w.fn.init [document]__proto__: Object(0)"""
                   
    $('ul li:even')  # 拿索引为偶数的li,0包含在内:0,2,4...
    """w.fn.init(5) [li, li, li, li.c1, li#d1, prevObject: w.fn.init(1)]0: li1: li2: li3: li.c14: li#d1length: 5prevObject: w.fn.init [document]__proto__: Object(0)"""
                  
    $('ul li:odd')  # 拿奇数索引:1,3,5...
    """w.fn.init(5) [li, li, li, li, li, prevObject: w.fn.init(1)]0: li1: li2: li3: li4: lilength: 5prevObject: w.fn.init [document]__proto__: Object(0)"""
                  
    $('ul li:gt(2)')  # 拿大于索引值的li,>2: 3,4,5...
    """w.fn.init(7) [li, li, li, li.c1, li, li#d1, li, prevObject: w.fn.init(1)]0: li1: li2: li3: li.c14: li5: li#d16: lilength: 7prevObject: w.fn.init [document]__proto__: Object(0)"""
                  
    $('ul li:lt(2)')  # 拿小于索引值的li,<2: 0,1,2
    """w.fn.init(2) [li, li, prevObject: w.fn.init(1)]0: li1: lilength: 2prevObject: w.fn.init [document]__proto__: Object(0)
                  """
    $('ul li:not("#d1")')  # 移除满足条件的标签,除了id为d1的li全拿到
    """w.fn.init(9) [li, li, li, li, li, li, li.c1, li, li, prevObject: w.fn.init(1)]"""
             
    $('div:has("p")')  # 选取出包含一个或多个标签在内的标签,必须满足嵌套关系
    # w.fn.init [div, prevObject: w.fn.init(1)]
    

    除了拿所有的li,其他筛选的格式可归纳为:$('ul li:限制条件');冒号后面跟不同的限制条件查询到不同的结果;

    first:第一个、last:最后一个、eq(索引):拿索引、even:拿偶数、odd:拿奇数、gt(2):拿大于、lt(2):拿小于、not():除了这个都拿、has():包含这个的都拿。

    属性选择器

    $('[username]')  # 具有username属性的
    # w.fn.init(3) [input, input, p, prevObject: w.fn.init(1)]
    
    $('[username="jason"]')  # 具有username属性并且等于jason的
    # w.fn.init [input, prevObject: w.fn.init(1)]
    
    $('p[username="egon"]')  # p标签具有username属性并且等于jason 的
    w.fn.init [p, prevObject: w.fn.init(1)]
    
    $('[type]')
    # w.fn.init(2) [input, input, prevObject: w.fn.init(1)]
    
    $('[type="text"]')
    #w.fn.init(2) [input, input, prevObject: w.fn.init(1)]
    

    表单选择器

    $('input[type="text"]')
    $(':text') # 简写,会自动匹配到input[type=""],和上面的 
    """w.fn.init [input, prevObject: w.fn.init(1)]0: inputlength: 1prevObject: w.fn.init [document]__proto__: Object(0)"""
    
    $('input[type="password"]')
    $(':password')  # 简写
    # w.fn.init [input, prevObject: w.fn.init(1)]
    
    # 下面其他的操作方法相同
    """
    :text
    :password
    :file
    :radio
    :checkbox
    :submit
    :reset
    :button
    ...
    """
    
    # 表单对象属性
    """
    :enabled
    :disabled
    :checked
    :selected"""
    
    # 特殊情况
    $(':checked')  # 它会将checked和selected都拿到
    w.fn.init(2) [input, option, prevObject: w.fn.init(1)]0: input1: optionlength: 2prevObject: w.fn.init [document]__proto__: Object(0)
    $(':selected')  # 它不会 只拿selected
    w.fn.init [option, prevObject: w.fn.init(1)]
    $('input:checked')  # 自己加一个限制条件
    w.fn.init [input, prevObject: w.fn.init(1)]
    

    筛选器方法

    # 标签的上方
    $('#d1').next()  # 同级别下一个
    
    $('#d1').nextAll()  # 同级下面所有
    
    $('#d1').nextUntil('.c1')  # 同级别下面取到'.c1'为止,不包括'.c1'
    
     
    # 标签的下方
    $('.c1').prev()   # 同级别上一个
    
    $('.c1').prevAll()  # 同级上面所有
    
    $('.c1').prevUntil('#d2')  # 同级别上面取到'#d2'为止,不包括'#d2''
    
     
    # 父标签
    $('#d3').parent()  # 标签外第一层父标签,p标签
    """
    w.fn.init [p, prevObject: w.fn.init(1)]0: plength: 1prevObject: w.fn.init [span#d3]__proto__: Object(0)
    """
    
    $('#d3').parent().parent()  # 标签外第二层父标签,div标签
    # w.fn.init [div#d2, prevObject: w.fn.init(1)]
    
    $('#d3').parent().parent().parent()  # 标签外第三层父标签,body标签
    # w.fn.init [body, prevObject: w.fn.init(1)]
    
    $('#d3').parent().parent().parent().parent()  # 标签外第四层父标签,html
    # w.fn.init [html, prevObject: w.fn.init(1)]
    
    $('#d3').parent().parent().parent().parent().parent() # html外再取父标签没有语言,标签外第五层,document
    # w.fn.init [document, prevObject: w.fn.init(1)]
    
    $('#d3').parent().parent().parent().parent().parent().parent() # 第五层,prevObject
    # w.fn.init [prevObject: w.fn.init(1)]
    
    
    # 一步到位直接获取所有的父级及以上的所有标签
    $('#d3').parents()
    w.fn.init(4) [p, div#d2, body, html, prevObject: w.fn.init(1)]
                  
    $('#d3').parentsUntil('body') 
    w.fn.init(2) [p, div#d2, prevObject: w.fn.init(1)]
                  
                 
    $('#d2').children()  # 儿子
          
                  
    $('#d2').siblings()  # 同级别上下所有
                  
                  
                  
    $('div p')          
    $('div').find('p')  # 两者等价,find从某个区域内筛选出想要的标签 
                  
                  
    $('div span:first')
    $('div span').first()  # 两者等价,从div中筛选出的第一个span                      
                  
    $('div span:last')
    $('div span').last()   # 两者等价,从div中筛选出的最后一个span  
                                                                                        
    $('div span:not("#d3")')  
    $('div span').not('#d3')  # 两者等价,从div中筛选出id不是d3的span
    
    

    ps:引号使用规则,遵循外单内双或者外双内单。

  • 相关阅读:
    实数---Currency讲解
    自己写的 限制文本框TEdit中只能输入数字
    maven增加自定义jar包
    delphi 类方法、类变量、类常量、类属性的研究,自己的研究
    BASE64 官方方法,我自己用的,注意记住换行问题。
    ComponentCount 与 ControlCount 区别
    关于delphi 中 Sender的学习
    Redis源码分析(二十八)--- object创建和释放redisObject对象
    Redis源码分析(二十八)--- object创建和释放redisObject对象
    Redis源码分析(二十九)--- bio后台I/O服务的实现
  • 原文地址:https://www.cnblogs.com/zhangtieshan/p/12920404.html
Copyright © 2020-2023  润新知