关于jquery:day32-jQuery-进阶

jQuery中的Ajax:

在jQuery中,上面6种办法只有load()须要jQueryDom对象打点来调,其余都是$间接调

  • $.Ajax()办法属于最底层的办法;
  • 第2层是load(),$.get(),和$.post();
  • 第3层是$.getScript()和$.getJSON()办法;

1. load() 办法

构造:load(url , [data] , [callback] )

案例1: load(url)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <div id="box">
            
        </div>
    </body>
</html>
<script src="myjQuery.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
    $(function(){
        //load办法加载html
        $("#box").load("test.html");
    });
</script>

test.html 文件

hello world;

后果:将url返回的内容当做该元素的innerHTML。

案例2:页面头部反复援用

load.html文件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }

            header {
                height: 100px;
                background: yellow;
            }

            header ul {
                height: 100px;
                width: 800px;
                position: relative;
                margin: 0 auto;
                opacity: 0.5;
            }

            header ul li {
                list-style: none;
                width: 150px;
                background: red;
                text-align: center;
                line-height: 100px;
                border: 1px solid black;
                float: left;
            }

            section {
                height: 300px;
                background: green;
                opacity: 0.3;
            }

            footer {
                height: 300px;
                background: blue;
                opacity: 0.3;
            }
        </style>
    </head>
    <body>
        <header>


        </header>
        <section>


        </section>
        <footer>

        </footer>
    </body>
</html>
<script src="jQuery.js"></script>
<script type="text/javascript">
    $('header').load("head.html",function(){
        $("li").click(function(){
            console.log($(this).html());
        });
    });
</script>

head.html文件(间接是代码,不须要写html head body等那些构造)

<ul>
    <li>主题1</li>
    <li>主题2</li>
    <li>主题3</li>
    <li>主题4</li>
    <li>主题5</li>
</ul>

改良,即在以后页面(2-header.html),只有load头部文件即可。以后页面不须要写css js(将html css js 都整合在2-head.html中)

2-header.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
            </head>
    <body>
        <header>

        </header>
        <section>

        </section>
        <footer>

        </footer>
    </body>
</html>
<script src="../jQuery.js"></script>
<script type="text/javascript">
    $("header").load("2-head.html");
</script>

2-head.html

<link rel="stylesheet" type="text/css" href="2-head.css"/>
<ul>
    <li>主题1</li>
    <li>主题2</li>
    <li>主题3</li>
    <li>主题4</li>
    <li>主题5</li>
</ul>
<script src='2-head.js'></script>

2-head.js

$("li").click(function() {
        console.log($(this).html());
    });

2-head.css 略

筛选载入的HTML文档

如果只有加载页面内的某些内容,能够应用load(URL selector)办法的URL参数来达到目标。

留神:URL和选择器之间有一个空格

<script type="text/javascript">
    //只申请2-head.html中的ul,其余以及link script都申请
    $("header").load("2-head.html ul");
</script>

2. $.get() 和 $.post()

load()通常是从web服务器上获取动态的数据文件,如果须要专递一些参数给服务器中的页面,能够应用
$.get( ) 办法和$.post()办法(或$.ajax()办法)

构造:

  • $.get(url,[data],[callback],[type]);
  • 参数解释:

    • data: 以json的形式传参
    • 回调函数的参数是固定的(相似于forEach,filter那些回调,参数也是固定的)。回调含税只有当数据胜利(success)后能力被调用

      • 第一个是返回的内容responseText,能够是XML文档,json文件,XHML片段等
      • 第二个是响应状态status。 申请状态:success error

案例:

html文件:

<script src="../jQuery.js"></script>
<script type="text/javascript">
    //留神: 运行php文件须要关上phpStudy软件作为服务器,并应用服务器地址运行代码
    $.get("3-getAndPost.php",{name:"xiaoming",age:18},function(resText,status){
        console.log(resText);//xiaoming 18
        console.log(status);//success
    });    
</script>

3-getAndPost.php

<?php
    header("Content/type:text/xtml;charset=utf-8");
    $name = $_REQUEST["name"];
    $age = $_REQUEST["age"];
    
    echo $name . ' ' . $age;
?>

返回值:

  • 返回后果为promise对象

案例:

    // get和post的返回值: promise对象
    // $.get().then(胜利的回调, 失败的回调)
    $.get("3-getAndPost.php",{name:"xiaohong",age:20},function(res){
        console.log(res);//xiaohong 20
    }).then(function(resText,status){
        console.log(resText);//xiaohong 20
        console.log(status);//success
    },function(){
        console.log("失败");
    })

因为应用办法雷同,因而只有扭转jQuery函数,就能够将程序在GET申请和POST申请之间切换;

$.post() 办法和$get()办法的构造和应用办法雷同,不过依然有一些区别:

get与post区别:

  • post的安全性高于get;

    • 如果以get形式申请,申请参数会拼接到url前面,安全性性低,
    • 以post形式申请,申请参数会包裹在申请体中,安全性更高;
  • 数据量区别:

    • get形式传输的数据量小,规定不能超过2kb,
    • post形式申请数据量大,没有限度。
  • 传输速度:get的传输速度高于post

3. $.getScript() 和$getJson()

有时候,在页面呈现时就获取所需的全副JavaScript文件是齐全没有必要的,能够在须要的时候间接加载。jQuery提供了 $.getScript( )办法来间接加载js文件,与加载一个HTML片段一样简略不便,并且不须要对JavaScript文件进行解决,JavaScript文件会主动执行。

$.getScript()构造:

  • $.getScript(url,fn);

    • url 申请地址
    • fn 回调

html文件:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            #box {
                width: 100px;
                height: 100px;
                border: 1px solid red;
            }
        </style>
    </head>
    <body>
        <div id="box">

        </div>
    </body>
</html>
<script src="../jQuery.js"></script>
<script type="text/javascript">
    $.getScript("4-getScript.js",function(){
        changeColor($("#box"));
    });
</script>

4-getScript.js

function changeColor(obj) {
        let color = "#";
        let str = "0123456789abcdef";

        for (let i = 0; i < 6; i++) {
            color += str.charAt(Math.round(Math.random() * 15));
        }

        obj.css({
            backgroundColor: color
        });
    }

$.getJSON()构造:

$.getJson( )办法用于加载JSON文件,与$.getScript( )办法的用法雷同;

$.getJSON( url,回调函数);

当点击加载时,页面上看不到任何成果,尽管函数加载了JSON文件,然而并没有告知JavaScript对返回的数据如何解决,为此,所以在回调函数里咱们能够解决返回的数据

通常咱们须要遍历咱们失去的数据,尽管这里咱们能够应用传统的for循环,然而咱们也能够通过$.each(),能够用来遍历对象和数组,$.each()函数是以一个数组或者对象为第1个参数,以一个回调函数作为第2个参数,回调函数领有两个参数,第1个为对象的成员或者数组的下标,第2个位对应变量或内容

$(function(){
  $("button").click(function(){
    $.getJSON( "text.json" , function( data ){
       $.each( data , function(index,comment){
         解决数据...
      }
    })
  })
})

4. $.Ajax()

后面用到的$.load(),$.get(),$.post(),$.getScript(),$.getJSON()这些办法,都是基于$.ajax()办法构建的,$.ajax()是jQuery最底层的Ajax实现,因为能够用来代替后面的所有办法。

所以如果除了下面,还须要编写一下简单的Ajax程序,那么就要用$.ajax()。

语法:

$.ajax({
    url: 申请地址,
    type: "get(默认)"/"post"/"put"/"delete",
    data: 申请参数 {id:123,pwd:456},
    //dataType:申请数据类型"html | text | json | xml | script | jsonp ",
    success:function(data,dataTextStatus,jqxhr){ },//申请胜利时
    error:function(jqxhr,textStatus,error)//申请失败时
});
<script type="text/javascript">
    $.ajax({
        url:"3-getAndPost.php",
        type:"get",
        data:{
            name: "彭于晏",
            age: "18"
        },
        success:function(resText){
            console.log(resText);//彭于晏 18
        }
    });
</script>

5. jQueryDom(各种API)

(1) 先人

parent();
parents();

(2) 后辈

children();
find();//必须有参数

(3) 兄弟

siblings();//除了本人之外的所有兄弟
next();
nextAll();
prev();
prevAll();

(4) 过滤 (筛选)

eq();

(5) 操作元素属性

attr()

.attr();
.prop();
//两者区别:
input的checked属性
console.log($("input").attr("checked"));//checked
console.log($("input").prop("checked"));//true
所以true/false对于逻辑判断更罕用
    let oBox = document.getElementById("box");
    // 原生批改属性值
    oBox.id = "heihei";
    // 原生读取属性值
    console.log(oBox.id);//heihei
    //一个参数为读
    console.log($("#box").attr("id"));//xixi
    //两个参数为改或者增加
    $("#box").attr("id","xixi");
    $('#xixi').attr("name","oBox");
    // 增加多个属性
    $("#xixi").attr({
        a:1,
        b:2,
        c:3
    });

css()

    // css()
    //写
    $('#box').css({
        width: 100,
        height: 100,
        backgroundColor: "pink"
    });
    // 读(很少用css读属性)
    console.log($("#box").css("width"));//100px
    //一次读取多个值
    console.log($("#box").css(["width","height","backgroundColor"]));

(6) 宽度

  • witdh
  • innerWidth
  • outerWidth
        <style type="text/css">
            #box{
                   width: 100px;
                   height: 100px;
                   background: #0000FF;
                   border: 10px solid red;
                   padding: 20px;
               }
        </style>
<script src="jQuery.js"></script>
<script type="text/javascript">
    console.log($("#box").width());//content 100
    console.log($("#box").innerWidth());//content+padding 100+20*2= 140
    console.log($("#box").outerWidth());//content+padding+border 100+2*20+10*2=160
</script>

(7) 偏移offset()

offset()自带相对定位

    // 写
    $("#box").offset({
        left: 200,
        top: 300
    });
    // 读
    console.log($("#box").offset().left);//200
    console.log($("#box").offset().top);//300

(8) 滚动条高度scrollTop()

window.onscroll事件

    window.onscroll = function(){
        console.log($(window).scrollTop());
    }

返回顶端

    <style type="text/css">
            body{
                height: 1000px;
            }
    </style>
    <body>
        <button type="button">返回顶端</button>    
    </body>
<script>
    $("button").click(function(){
        $(window).scrollTop(0);
    })
</script>

(9) index()

index();返回以后元素在父元素的下标

    $("li").click(function(){
        console.log($(this).index());
    });

(10) 节点操作

创立元素节点

<script>
    //创立办法1:
    let oDiv = $("<div>");
    oDiv.html(123);
    //创立办法2:
    let oDiv = $("<div>666</div>");
    // 追加
    $("body").append(oDiv);
</script>

追加节点

1) 尾插
append()
appendTo()
    let oLi = $("<li>");
    oLi.html("xixi");    
    $("ul").append(oLi);
    oLi.appendTo($("ul"));
2) 头插
prepend()
prependTo()
    $("ul").prepend(oLi);
    oLi.prependTo($("ul"));
3) 插入到指标元素之后
after()
insertAfter()
    $("li").eq(2).after(oLi);
    oLi.insertAfter($("li").eq(2));
4) 插入到指标元素之前
before()
insertBefore()
    $("li").eq(2).before(oLi);
    oLi.insertBefore($("li").eq(2));

6. 懒加载

1)什么是懒加载

懒加载其实就是提早加载,是一种对网页性能优化的形式,比方当拜访一个页面的时候,优先显示可视区域的图片而不一次性加载所有图片,当须要显示的时候再发送图片申请,防止关上网页时加载过多资源。

2) 什么时候用懒加载

当页面中须要一次性载入很多图片的时候,往往都是须要用懒加载的。

3) 懒加载原理

  • 咱们都晓得HTML中的< img >标签是代表文档中的一个图像;
  • < img > 标签有一个属性是src,用来示意图像的URL,当这个属性的值不为空时,浏览器就会依据这个值发送申请。如果没有src属性,就不会发送申请。
  • 咱们先不给< img >设置src,把图片真正的URL放在另一个属性data-src中,在须要的时候也就是图片进入可视区域的之前,将URL取出放到src中。

4) 须要用到知识点

(1) 图片间隔顶部的高度:

  • img.offsetTop

(2) 以后窗口的高度:

  • window.innerHeight

(3) 滚动条滚动的高度:

  • document.body.scrollTop || document.documentElement.scrollTop

5) 加载图片的判断条件

图片间隔顶部的间隔 < 浏览器滚动条滚动的高度 + 浏览器窗口的高度

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据