zoukankan      html  css  js  c++  java
  • day57-jQuery练习、操作标签、事件

    每日测验

    """
    今日考题:
    1.有一个列表[3,4,1,2,5,6,6,5,4,3,3]请写出一个函数,找出该列表中没有重复的数的总和
    2.简述数据库表设计中一对一、一对多、多对多的应用场景,char与varchar的区别
    3.js代码书写位置有几种,什么是事件,js如何绑定事件,常见的事件有哪些
    4.什么是jQuery,它的基本语法是什么,jQuery导入方式有哪些分别有什么区别,
    列举你所知道的jQuery选择器(针对表单筛选器是否有注意事项)
    """
    

    昨日内容回顾

    • js事件

      # js绑定事件的两种方式
      
      # 自己独立的敲出来昨天的案例
      """
      1.开关灯
      	pEle.classList.add()
      	...
      2.input框获取、失去焦点
      	onfocus
      	onblur
      3.计时器
      	onclick
      	js代码逻辑
      4.省市联动
      	onchange文本域变化
      		就记忆一个select
      """
      
    • jQuery简介

      """
      内部封装了并且提供了额外功能的模块、框架
      	类库
      
      兼容多个浏览器
      
      版本更新
      	1.X
      	2.X
      	3.X
      
      宗旨
      	write less do more
      
      如何导入jQuery
      	1.将文件下载到本地直接导入(压缩、未压缩)
      		好处在于没有网也可以正常使用
      		不好的地方在于需要重复书写,文件路径还要固定
      		(pycharm模块功能 自动添加固定的代码
      			配置
      				编辑
      					file and code template
      						html
      						py
      		)
      		
      	2.CDN服务
      		CDN的概念:内容分发网络
      		参考网站:bootcdn
      			前端相关的应用程序都有免费的cdn服务
      		
      		好处在于无需下载对应的文件,直接走网络请求使用
      		不好的地方在于必须要有网
      
      基本语法结构
      	jQuery().action()		=== $().action()
      """
      
    • jQuery选择器

      # 基本选择器
      $('#d1')
      $('.c1')
      $('span')
      """
      jQuery选择器拿到的都是jQuery对象(你可以看成是一个数组)
      
      重点
      	jQuery对象和标签对象的区分
      		jQuery >>> 标签对象
      			$('#d1')[0]
      		
      		标签对象 >>> jQuery
      			$(document.getElementById('d1'))
      	不同的对象之间调用的方法是不一样的,不能混用
      """
      
      # 组合、分组、嵌套
      $('div,span,p')
      $('#d1,.c1,div')
      $('div span')  # 后代
      $('div>span')	 # 儿子
      $('div+span')  # 毗邻
      $('div~span')  # 弟弟
      
      
      # 基本筛选器
      """
      针对已经得到的结果进行二次筛选
      :first
      :last
      :eq(index)
      :even
      :odd
      :gt(index)
      :lt(index)
      :not
      :has  从后代元素中筛选
      	$('div:has(".c1")')
      """
      
      # 属性选择器
      $('[username]')
      $('[username="jason"]')
      $('input[username="jason"]')
      
      # 表单筛选器
      $('input[type="text"]')
      $(':text')
      :text
      ...
      :file
      
        
      """
      特殊情况
      	$(':checked')  拿到默认选中的checkbox和option
      		$('input:checked')
      	在书写表单筛选器的时候 如果前面可以加限制条件最好加一个
      """
      
      # 筛选器方法
      .next()
      .nextAll()
      .nextUntil()  # 不包含最后一个
      
      .prev()
      .prevAll()
      .prevUntil()  # 不包含最后一个
      
      .parent()
      .parents()
      .parentsUntil()  # 不包含最后一个
      
      .children()  # 儿子们
      .siblings()  # 兄弟 同级别上下所有
      
      $('div p')   ===   $('div').find('p')
      
      # 基本筛选器优化封装
      .first()
      .last()
      .not()
      .has()
      .eq()
      """
      选择器无论你用哪个都可以 只要能够实现需求就行
      """
      
      

    今日内容概要

    今天要把jQuery全部结束

    • jQuery操作标签
    • jQuery绑定事件
    • jQuery补充知识点
    • jQuery动画效果(了解)
    • Bootstrap(前端框架)开头

    今日内容详细

    jQuery练习题

     找到本页面中id是i1的标签
     $('#i1')
     r.fn.init [div#i1.container]
                
     找到本页面中所有的h2标签
    $('h2')
     r.fn.init [h2, prevObject: r.fn.init(1)]
     
    找到本页面中所有的input标签
     $('input')
     r.fn.init(9) [input#exampleInputEmail1.form-control, input#exampleInputPassword1.form-control, input#exampleInputFile, input, input, input, input, input#optionsRadios1, input#optionsRadios2, prevObject: r.fn.init(1)]
                   
    找到本页面所有样式类中有c1的标签
    $('.c1')
     r.fn.init(2) [h1.c1, h1.c1, prevObject: r.fn.init(1)]
     
    找到本页面所有样式类中有btn-default的标签
    $('.btn-default')
     r.fn.init [button#btnSubmit.btn.btn-default, prevObject: r.fn.init(1)]
                
    找到本页面所有样式类中有c1的标签和所有h2标签
     $('.c1,h2')
     r.fn.init(3) [h1.c1, h1.c1, h2, prevObject: r.fn.init(1)]
     
    找到本页面所有样式类中有c1的标签和id是p3的标签
     $('.c1,#p3')
     r.fn.init(3) [h1.c1, h1.c1, p#p3.divider, prevObject: r.fn.init(1)]
                   
    找到本页面所有样式类中有c1的标签和所有样式类中有btn的标签
     $('.c1,.btn')
     r.fn.init(11) [h1.c1, h1.c1, a.btn.btn-primary.btn-lg, button.btn.btn-warning, button.btn.btn-danger, button.btn.btn-warning, button.btn.btn-danger, button.btn.btn-warning, button.btn.btn-danger, button#btnSubmit.btn.btn-default, a.btn.btn-success, prevObject: r.fn.init(1)]
                    
    找到本页面中form标签中的所有input标签
    $('form').find('input')
     r.fn.init(3) [input#exampleInputEmail1.form-control, input#exampleInputPassword1.form-control, input#exampleInputFile, prevObject: r.fn.init(1)]
                   
    找到本页面中被包裹在label标签内的input标签
     $('label input')
     r.fn.init(6) [input, input, input, input, input#optionsRadios1, input#optionsRadios2, prevObject: r.fn.init(1)]
                   
    找到本页面中紧挨在label标签后面的input标签
     $('label+input')
     r.fn.init(3) [input#exampleInputEmail1.form-control, input#exampleInputPassword1.form-control, input#exampleInputFile, prevObject: r.fn.init(1)]
                   
    找到本页面中id为p2的标签后面所有和它同级的li标签
     $('#p2~li')
     r.fn.init(8) [li, li, li, li, li, li, li, li, prevObject: r.fn.init(1)]
     
    找到id值为f1的标签内部的第一个input标签
     $('#f1 input:first')
     r.fn.init [input#exampleInputEmail1.form-control, prevObject: r.fn.init(1)]
                
    找到id值为my-checkbox的标签内部最后一个input标签
     $('#my-checkbox input:last')
     r.fn.init [input, prevObject: r.fn.init(1)]
     
    找到id值为my-checkbox的标签内部没有被选中的那个input标签
     $('#my-checkbox input[checked!="checked"]')
     r.fn.init(3) [input, input, input, prevObject: r.fn.init(1)]0: input1: input2: inputlength: 3prevObject: r.fn.init [document]__proto__: Object(0)
     
     找到所有含有input标签的label标签
     $('label:has("input")')
     r.fn.init(6) [label, label, label, label, label, label, prevObject: r.fn.init(1)]
    

    操作标签

      # 操作类
      js版本								            jQuery版本
      classList.add()									addClass()
      classList.remove()								removeClass()
      classList.contains()							hasClass()
      classList.toggle()								toggleClass()
      
      # css操作
      <p>111</p>
      <p>222</p>
      """一行代码将第一个p标签变成红色第二个p标签变成绿色"""
      $('p').first().css('color','red').next().css('color','green')
      # jQuery的链式操作 使用jQuery可以做到一行代码操作很多标签
      # jQuery对象调用jQuery方法之后返回的还是当前jQuery对象 也就可以继续调用其他方法
      class MyClass(object):
          def func1(self):
              print('func1')
              return self
      
          def func2(self):
              print('func2')
              return self
      obj = MyClass()
      obj.func1().func2()
      
      # 位置操作
      offset()  # 相对于浏览器窗口
      position()  # 相对于父标签
      
      scrollTop()		# 需要了解
      	$(window).scrollTop()
        0
        $(window).scrollTop()
        969
        $(window).scrollTop()  # 括号内不加参数就是获取
        1733
        $(window).scrollTop(0)  # 加了参数就是设置
        n.fn.init [Window]
        $(window).scrollTop(500)
        n.fn.init [Window]
      scrollLeft()
      
      # 尺寸
      $('p').height()  # 文本
      20
      $('p').width()
      1670
      $('p').innerHeight()  # 文本+padding
      26
      $('p').innerWidth()
      1674
      $('p').outerHeight()  # 文本+padding+border
      26
      $('p').outerWidth()
      1674
      
      
      # 文本操作
      """
      操作标签内部文本
      js											jQuery
      innerText								text()  括号内不加参数就是获取加了就是设置
      innerHTML								html()
      
      $('div').text()
      "
          
              有些话听听就过去了,不要在意,都是成年人!
          
      "
      $('div').html()
      "
          <p>
              有些话听听就过去了,不要在意,都是成年人!
          </p>
      "
      $('div').text('你们都是我的大宝贝')
      w.fn.init [div, prevObject: w.fn.init(1)]
      $('div').html('你个臭妹妹')
      w.fn.init [div, prevObject: w.fn.init(1)]
      $('div').text('<h1>你们都是我的大宝贝</h1>')
      w.fn.init [div, prevObject: w.fn.init(1)]
      $('div').html('<h1>你个臭妹妹</h1>')
      w.fn.init [div, prevObject: w.fn.init(1)]
      """
      # 获取值操作
      """
      js													jQuery
      .value											.val()
      """
      $('#d1').val()
      "sasdasdsadsadad"
      $('#d1').val('520快乐')  # 括号内不加参数就是获取加了就是设置
      
      w.fn.init [input#d1]
      $('#d2').val()
      "C:fakepath1_测试路由.png"
      $('#d2')[0].files[0]  # 牢记两个对象之间的转换
      File {name: "01_测试路由.png", lastModified: 1557043083000, lastModifiedDate: Sun May 05 2019 15:58:03 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 28733,}
                 
                 
      # 属性操作
      """
      js中																jQuery
      setAttribute()											attr(name,value)
      getAttribute()											attr(name)
      removeAttribute()										removeAttr(name)
      
      在用变量存储对象的时候 js中推荐使用	
      	XXXEle			标签对象
      jQuery中推荐使用
      	$XXXEle			jQuery对象
      """
      let $pEle = $('p')
      undefined
      $pEle.attr('id')
      "d1"
      $pEle.attr('class')
      undefined
      $pEle.attr('class','c1')
      w.fn.init [p#d1.c1, prevObject: w.fn.init(1)]
      $pEle.attr('id','id666')
      w.fn.init [p#id666.c1, prevObject: w.fn.init(1)]
      $pEle.attr('password','jason123')
      w.fn.init [p#id666.c1, prevObject: w.fn.init(1)]
      $pEle.removeAttr('password')
      w.fn.init [p#id666.c1, prevObject: w.fn.init(1)]       
            
                 
      """
      对于标签上有的能够看到的属性和自定义属性用attr
      对于返回布尔值比如checkbox radio option是否被选中用prop
      """
                 
      $('#d3').attr('checked')
      "checked"
      $('#d2').attr('checked')
      undefined
      $('#d2').attr('checked')
      undefined
      $('#d4').attr('checked')
      undefined
      $('#d3').attr('checked')
      "checked"
      $('#d3').attr('checked','checked')  # 无效
      w.fn.init [input#d3]
                 
                 
      $('#d2').prop('checked')
      false
      $('#d2').prop('checked')
      true
      $('#d3').prop('checked',true)
      w.fn.init [input#d3]
      $('#d3').prop('checked',false)
      w.fn.init [input#d3]
                 
                 
      # 文档处理
      """
      js																		jQuery
      createElement('p')										$('<p>')
      appendChild()													append()
      
      """
      let $pEle = $('<p>')
      $pEle.text('你好啊 草莓要不要来几个?')
      $pEle.attr('id','d1')          
      $('#d1').append($pEle)  # 内部尾部追加
      $pEle.appendTo($('#d1')) 
                 
      $('#d1').prepend($pEle)  # 内部头部追加
      w.fn.init [div#d1]
      $pEle.prependTo($('#d1'))
      w.fn.init [p#d1, prevObject: w.fn.init(1)]
               
      $('#d2').after($pEle)  # 放在某个标签后面
      w.fn.init [p#d2]
      $pEle.insertAfter($('#d1'))
              
      $('#d1').before($pEle)
      w.fn.init [div#d1]
      $pEle.insertBefore($('#d2'))
      
      $('#d1').remove()  # 将标签从DOM树中删除
      w.fn.init [div#d1]
                 
      $('#d1').empty()  # 清空标签内部所有的内容
      w.fn.init [div#d1]
    

    事件

    // 第一种
        $('#d1').click(function () {
                alert('别说话 吻我')
        });
      
    // 第二种(功能更加强大 还支持事件委托)
        $('#d2').on('click',function () {
                alert('借我钱买草莓 后面还你')
        })
    
    • 克隆事件

      <button id="d1">屠龙宝刀,点击就送</button>
      
      <script>
          $('#d1').on('click',function () {
              // console.log(this)  // this指代是当前被操作的标签对象
              // $(this).clone().insertAfter($('body'))  // clone默认情况下只克隆html和css 不克隆事件
              $(this).clone(true).insertAfter($('body'))  // 括号内加true即可克隆事件
      
          })
      </script>
      
    • 自定义模态框

      """
      模态框内部本质就是给标签移除或者添加上hide属性
      """
      
    • 左侧菜单

      <script>
          $('.title').click(function () {
              // 先给所有的items加hide
              $('.items').addClass('hide')
              // 然后将被点击标签内部的hide移除
              $(this).children().removeClass('hide')
          })
      </script>
      <!--尝试用一行代码搞定上面的操作-->
      
    • 返回顶部

      <script>
          $(window).scroll(function () {
              if($(window).scrollTop() > 300){
                  $('#d1').removeClass('hide')
              }else{
                  $('#d1').addClass('hide')
              }
          })
      </script>
      
    • 自定义登陆校验

      # 在获取用户的用户名和密码的时候 用户如果没有填写 应该给用户展示提示信息
      <p>username:
          <input type="text" id="username">
          <span style="color: red"></span>
      </p>
      <p>password:
          <input type="text" id="password">
          <span style="color: red"></span>
      </p>
      <button id="d1">提交</button>
      
      <script>
          let $userName = $('#username')
          let $passWord = $('#password')
          $('#d1').click(function () {
              // 获取用户输入的用户名和密码 做校验
              let userName = $userName.val()
              let passWord = $passWord.val()
              if (!userName){
                  $userName.next().text("用户名不能为空")
              }
              if (!passWord){
                  $passWord.next().text('密码不能为空')
              }
          })
          $('input').focus(function () {
              $(this).next().text('')
          })
      </script>
      
    • input实时监控

      <input type="text" id="d1">
      
      <script>
          $('#d1').on('input',function () {
              console.log(this.value)  
          })
      </script>
      
    • hover事件

      <script>
          // $("#d1").hover(function () {  // 鼠标悬浮 + 鼠标移开
          //     alert(123)
          // })
      
          $('#d1').hover(
              function () {
                  alert('我来了')  // 悬浮
          },
              function () {
                  alert('我溜了')  // 移开
              }
          )
      </script>
      
    • 键盘按键按下事件

      <script>
          $(window).keydown(function (event) {
              console.log(event.keyCode)
              if (event.keyCode === 16){
                  alert('你按了shift键')
              }
          })
      </script>
      

    今日作业

    """
    今日作业
    必做
    1.利用jQuery链式操作一句话完成菜单显隐展示
    2.整理日考题目
    3.整理今日内容完成博客书写
    选做
    1.预习前端框架Bootstrap
    """
    
  • 相关阅读:
    string类
    设计模式--策略模式
    设计模式--单例模式
    Python 3.7的安装过程
    为什么学习Python?
    折半查找、选择排序在一位数组中的应用
    三天打鱼两天晒网
    字符串逆序
    求字符串长度函数实现的三种方法
    Spring学习笔记一 IOC、AOP原理
  • 原文地址:https://www.cnblogs.com/zdw20191029/p/14553313.html
Copyright © 2011-2022 走看看