zoukankan      html  css  js  c++  java
  • 前端入门07——jQuery基本语法&导入&选择器

    昨日内容回顾

    • BOM与DOM操作

    • BOM操作

      # window对象
      window.innerHeight
      window.innerWidth
      window.open()  # 新建窗口打开指定的页面
          window.open(url,'','height,width,top,bottom')
      window.close()  # 关闭当前窗口
      ​
      # navigator对象
      navigator.userAgent     # 后面讲爬虫还会涉及
      ​
      # history对象
      window.history.forward()
      window.history.back()
      ​
      # location对象
      window.location.href  # 获取当前页面的url
      window.location.href = url  # 跳转到指定的url
      window.loacation.reload()
      ​
      # 弹出框
      alert()
      confirm()  获取到用户点击的确定还是取消
      prompt()        获取到用户输入的内容
      ​
      # 计时器相关
      1.
          setTimeout()
          clearTimeout()
      2.
          setInterval()
        clearInterval()

       

    • DOM操作

      """
      DOM树的概念
      ​
      DOM操作可以操作
          HTML
          CSS
          事件
      ​
      既然要操作 那首先得学会如何查找标签
      """
      ​
      # 直接查找
      document.getElementById('d1')  # 直接获取到标签对象
      document.getElementsByClassName('c1')  # 数组
      document.getElementsByTagName('div')  # 数组
      ​
      # 间接查找
      parentElement
      children
      firstElementChild
      lastElementChild
      nextElementSibling
      previousElementSibling
      ​
      # 节点操作
          1.创建img标签,赋值属性,添加到文档中
        2.创建a标签,赋值属性和内部文本,添加到文档中
          """
          1.创建标签
              let pEle = document.createElement('p')
          2.赋值属性
              pEle.id = 'd1'
              pEle.setAttribute('username','jason')
              pEle.setAttribute('class','c1')
          3.赋值内部文本
              pEle.innerText = '我是p标签'
          4.添加到其他标签内部
              appendChild()
                  ...
              insertBefore()
                  ...
              setAttribute()
                  get...
                  remove...
          """
      # innerText与InnerHTML
          # innerText只能获取标签内部的文本 设置文本的时候不识别HTML
        # InnerHTML文本和标签都获取 设置文本的时候识别HTML
      ​
      # 获取值操作  value
          inputEle = document.getElementById('i1')
        inputEle.value
      # 获取文件数据
        inputEle.files    # 数组  [文件对象,文件对象1...]
        inputEle.files[0]
      # class操作
          classList
        classList.add()
        classList.remove()
        classList.contains()
        classList.toggle()  # 有删无加
      # css操作  只要想操作标签css先用style起手
      pEle.style.color
      pEle.style.backgroudColor
      pEle.style.marginTop
      pEle.style.fontSize         
      """
      会讲css中横杆或者下划线去掉 然后讲后面的单词变大写
      font-size               fontSize
      """
      ​
      # 事件
      """
      到达某个条件自动触发的动作
      """
      # 绑定事件的两种方式
          <p onclick='func()'></p>
        <p id='d1'></p>
        
        <script>
          // 第一种
          function func(){}
          // 第二种
          pEle = document.getElementById('d1')
          pEle.onclick = function(){}
        </script>
      # js代码到底应该写在html页面的哪个位置
          一般都是放在body内最下方
      # onload
          等待XXX加载/读取/渲染...完毕
        XXX.onload
          等待XXX好了

       

     

     

     

     

     

    今日内容概要

    • jQuery(封装了js的前端框架(模块))

      很容易与我们学的DOM操作混淆

     

    jQuery

    """
    jQuery内部封装了原生的js代码(还额外添加了很多的功能)
    能够让你通过书写更少的代码 完成js操作
    类似于python里面的模块 在前端模块不叫模块 叫 “类库”

    兼容多个浏览器的 你在使用jQuery的时候就不需要考虑浏览器兼容问题

    jQuery的宗旨
    write less do more
    让你用更少的代码完成更多的事情

    复习
    python导入模块发生了哪些事?
    导入模块其实需要消耗资源
    jQuery在使用的时候也需要导入
    但是它的文件非常的小(几十KB) 基本不影响网络速度



    jQuery的优势
    1. 一款轻量级的JS框架。jQuery核心js文件才几十kb,不会影响页面加载速度。
    2. 丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
    3. 链式表达式。jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
    4. 事件、样式、动画支持。jQuery还简化了js操作css的代码,并且代码的可读性也比js要强。
    5. Ajax操作支持。jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
    6. 跨浏览器兼容。jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
    7. 插件扩展开发。jQuery有着丰富的第三方的插件,例如:树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件,并且用jQuery插件做出来的效果很炫,并且可以根据自己需要去改写和封装插件,简单实用。



    ​jQuery内容:

    选择器
    筛选器
    样式操作
    文本操作
    属性操作
    文档处理
    事件
    动画效果
    插件
    each、data、Ajax(重点 django部分学)

    版本介绍

    jQuery文件下载
    压缩 容量更小
    未压缩
    """
    # jQuery在使用之前 一定要确保已经导入了




    针对导入问题

    1 文件下载到了本地 如何解决多个文件反复书写引入语句的代码
    可以借助于pycharm自动初始化代码功能完成自动添加
    配置
      编辑
        file and code template
     """我不想下载jQuery文件 能不能使用呢?"""
     
    2 直接引入jQuery提供的CDN服务(基于网络直接请求加载)
    CDN:内容分发网络
    CDN有免费的也有收费的
       前端免费的cdn网站:
        bootcdn
       <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
     """你的计算机必须要有网络"""
     
     



    jQuery基本语法

    jQuery(selector).action()
         选择器
     秉持着jQuery的宗旨 jQuery简写 $
     jQuery() === $()

    # jQuery与js代码对比
    eg:将p标签内部的文本颜色改为红色

      // 原生js代码操作标签
    let pEle = document.getElementById('d1')
    pEle.style.color = 'red'

    // jQuery操作标签
    $('p').css('color','blue')




    先学如何查找标签

    基本选择器

    // id选择器
    $('#d1')
    w.fn.init [div#d1]0: div#d1length: 1__proto__: Object(0)

    // class选择器
    $('.c1')
    w.fn.init [p.c1, prevObject: w.fn.init(1)]0: p.c1length: 1prevObject: w.fn.init [document]__proto__: Object(0)

    // 标签选择器
    $('span')
    w.fn.init(3) [span, span, span, prevObject: w.fn.init(1)]


    """一定要区分开(重点)"""
    // jQuery对象如何变成标签对象
    undefined
    $('#d1')[0]
    <div id="d1">•…</div>
    document.getElementById('d1')
    <div id="d1">•…</div>

    // 标签对象如何转jQuery对象
    undefined
    $(document.getElementById('d1'))
    w.fn.init [div#d1]



    组合选择器/分组与嵌套

    $('div')
    w.fn.init(2) [div#d1, div.c1, prevObject: w.fn.init(1)]

    $('div.c1') //找到有c1 class 类的div标签
    w.fn.init [div.c1, prevObject: w.fn.init(1)]0: div.c1length: 1prevObject: w.fn.init [document]__proto__: Object(0)
    $('div#d1')
    w.fn.init [div#d1, prevObject: w.fn.init(1)]

    $('*') //所有元素选择器
    w.fn.init(19) [html, head, meta, title, meta, link, script, script, body, span, span, div#d1, span, p#d2, span, span, div.c1, span, span, 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)]



    基本筛选器

    :first // 第一个
    :last // 最后一个
    :eq(index)// 索引等于index的那个元素
    :even // 匹配所有索引值为偶数的元素,从 0 开始计数
    :odd // 匹配所有索引值为奇数的元素,从 0 开始计数
    :gt(index)// 匹配所有大于给定索引值的元素
    :lt(index)// 匹配所有小于给定索引值的元素
    :not(元素选择器)// 移除所有满足not条件的标签
    :has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)



    例子:
    $("div:has(h1)")// 找到所有后代中有h1标签的div标签
    $("div:has(.c1)")// 找到所有后代中有c1样式类的div标签
    $("li:not(.c1)")// 找到所有不包含c1样式类的li标签
    $("li:not(:has(a))")// 找到所有后代中不含a标签的li标签
    $('ul 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')  # 大儿子
    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)') # 放索引
    w.fn.init [li, prevObject: w.fn.init(1)]0: lilength: 1prevObject: w.fn.init [document]__proto__: Object(0)
                 
    $('ul li:even')  # 偶数索引 0包含在内
    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')  # 奇数索引
    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)')  # 大于索引
    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)')  # 小于索引
    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")')  # 移除满足条件的标签
    w.fn.init(9) [li, li, li, li, li, li, li.c1, li, li, prevObject: w.fn.init(1)]
           
    $('div')
    w.fn.init(2) [div, div, prevObject: w.fn.init(1)]
    $('div:has("p")')  # 选取出包含一个或多个标签在内的标签
    w.fn.init [div, prevObject: w.fn.init(1)]




    示例:自定义模态框,使用jQuery实现弹出和隐藏功能
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>自定义模态框</title>
      <style>
        .cover {
          position: fixed;
          left: 0;
          right: 0;
          top: 0;
          bottom: 0;
          background-color: darkgrey;
          z-index: 999;
        }
        .modal {
           600px;
          height: 400px;
          background-color: white;
          position: fixed;
          left: 50%;
          top: 50%;
          margin-left: -300px;
          margin-top: -200px;
          z-index: 1000;
        }
        .hide {
          display: none;
        }
      </style>
    </head>
    <body>
    <input type="button" value="弹" id="i0">
    
    <div class="cover hide"></div>
    <div class="modal hide">
      <label for="i1">姓名</label>
      <input id="i1" type="text">
       <label for="i2">爱好</label>
      <input id="i2" type="text">
      <input type="button" id="i3" value="关闭">
    </div>
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script>
      var tButton = $("#i0")[0];
      tButton.onclick=function () {
        var coverEle = $(".cover")[0];
        var modalEle = $(".modal")[0];
    
        $(coverEle).removeClass("hide");
        $(modalEle).removeClass("hide");
      };
    
      var cButton = $("#i3")[0];
      cButton.onclick=function () {
        var coverEle = $(".cover")[0];
        var modalEle = $(".modal")[0];
    
        $(coverEle).addClass("hide");
        $(modalEle).addClass("hide");
      }
    </script>
    </body>
    </html>
    
    


    属性选择器[attribute]

    $('[username]')
    w.fn.init(3) [input, input, p, prevObject: w.fn.init(1)]

    $('[username="jason"]') //属性等于
    w.fn.init [input, prevObject: w.fn.init(1)]

    $('p[username="egon"]') //属性不等于
    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"]')
    w.fn.init [input, prevObject: w.fn.init(1)]0: inputlength: 1prevObject: w.fn.init [document]__proto__: Object(0)

    $('input[type="password"]')
    w.fn.init [input, prevObject: w.fn.init(1)]

    $(':text')  # 等价于上面第一个
    w.fn.init [input, prevObject: w.fn.init(1)]0: inputlength: 1prevObject: w.fn.init [document]__proto__: Object(0)

    $(':password')  # 等价于上面第二个
    w.fn.init [input, prevObject: w.fn.init(1)]

    :text
    :password
    :file
    :radio
    :checkbox     //$(":checkbox")      找到所有的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,找到所有被选中的option
    w.fn.init [option, prevObject: w.fn.init(1)]

    $('input:checked')  //自己加一个限制条件
    w.fn.init [input, prevObject: w.fn.init(1)]



    筛选器方法$('#d1').next()   //同级别下一个

    w.fn.init [span, prevObject: w.fn.init(1)]0: spanlength: 1prevObject: w.fn.init [span#d1]__proto__: Object(0)
    $('#d1').nextAll()
    w.fn.init(5) [span, div#d2, span, span, span.c1, prevObject: w.fn.init(1)]0: span1: div#d22: span3: span4: span.c1length: 5prevObject: w.fn.init [span#d1]__proto__: Object(0)
    $('#d1').nextUntil('.c1')   //不包括最后一个
    w.fn.init(4) [span, div#d2, span, span, prevObject: w.fn.init(1)]0: span1: div#d22: span3: spanlength: 4prevObject: w.fn.init [span#d1]__proto__: Object(0)
                 
                 
    $('.c1').prev()  //上一个
    w.fn.init [span, prevObject: w.fn.init(1)]0: spanlength: 1prevObject: w.fn.init [span.c1, prevObject: w.fn.init(1)]__proto__: Object(0)
    $('.c1').prevAll()
    w.fn.init(5) [span, span, div#d2, span, span#d1, prevObject: w.fn.init(1)]
    $('.c1').prevUntil('#d2')
    w.fn.init(2) [span, span, prevObject: w.fn.init(1)]

                 
    $('#d3').parent()   //第一级父标签
    w.fn.init [p, prevObject: w.fn.init(1)]0: plength: 1prevObject: w.fn.init [span#d3]__proto__: Object(0)
    $('#d3').parent().parent()
    w.fn.init [div#d2, prevObject: w.fn.init(1)]
    $('#d3').parent().parent().parent()
    w.fn.init [body, prevObject: w.fn.init(1)]
    $('#d3').parent().parent().parent().parent()
    w.fn.init [html, prevObject: w.fn.init(1)]
    $('#d3').parent().parent().parent().parent().parent()
    w.fn.init [document, prevObject: w.fn.init(1)]
    $('#d3').parent().parent().parent().parent().parent().parent()
    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')
    w.fn.init [span, prevObject: w.fn.init(1)]
    $('div span').first()
    w.fn.init [span, prevObject: w.fn.init(3)]0: spanlength: 1prevObject: w.fn.init(3) [span, span#d3, span, prevObject: w.fn.init(1)]__proto__: Object(0)

                                                                                       
    $('div span:last')
    w.fn.init [span, prevObject: w.fn.init(1)]
    $('div span').last()

                                                                                       
    w.fn.init [span, prevObject: w.fn.init(3)]
    $('div span:not("#d3")')
    w.fn.init(2) [span, span, prevObject: w.fn.init(1)]
    $('div span').not('#d3')
    w.fn.init(2) [span, span, prevObject: w.fn.init(3)]

     

     

     示例:左侧菜单

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>左侧菜单示例</title>
      <style>
        .left {
          position: fixed;
          left: 0;
          top: 0;
           20%;
          height: 100%;
          background-color: rgb(47, 53, 61);
        }
    
        .right {
           80%;
          height: 100%;
        }
    
        .menu {
          color: white;
        }
    
        .title {
          text-align: center;
          padding: 10px 15px;
          border-bottom: 1px solid #23282e;
        }
    
        .items {
          background-color: #181c20;
    
        }
        .item {
          padding: 5px 10px;
          border-bottom: 1px solid #23282e;
        }
    
        .hide {
          display: none;
        }
      </style>
    </head>
    <body>
    
    <div class="left">
      <div class="menu">
        <div class="item">
          <div class="title">菜单一</div>
          <div class="items">
            <div class="item">111</div>
            <div class="item">222</div>
            <div class="item">333</div>
        </div>
        </div>
        <div class="item">
          <div class="title">菜单二</div>
          <div class="items hide">
          <div class="item">111</div>
          <div class="item">222</div>
          <div class="item">333</div>
        </div>
        </div>
        <div class="item">
          <div class="title">菜单三</div>
          <div class="items hide">
          <div class="item">111</div>
          <div class="item">222</div>
          <div class="item">333</div>
        </div>
        </div>
      </div>
    </div>
    <div class="right"></div>
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    
    <script>
      $(".title").click(function (){  // jQuery绑定事件
        // 隐藏所有class里有.items的标签
        // $(".items").addClass("hide");  //批量操作
        // $(this).next().removeClass("hide");
        
        // jQuery链式操作
        $(this).next().removeClass('hide').parent().siblings().find('.items').addClass('hide')
      });
    </script>

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    form的get与post方式的区别(转)
    html中DIV+CSS与TABLE布局方式的区别及HTML5新加入的结构标签(转)
    HTML简介
    数据库设计 三范式
    索引与视图
    算法训练 连续正整数的和
    算法训练 寂寞的数
    算法训练 学做菜
    算法训练 猴子分苹果
    算法训练 A+B problem
  • 原文地址:https://www.cnblogs.com/lucky-cat233/p/12918567.html
Copyright © 2011-2022 走看看