jQuery常用方法以及ajax

jQuery常用函数

.each(function(index,Element))

遍历一个jQuery对象,为每个匹配元素执行一个函数

    $('li').each(function (index,element) {
//        需要注意的是这里的element是原生DOM对象,其实这里的element就等价于这个this
        console.log(index + ':' + $(this).text());
    })

.map(callback(index,domElement))

通过一个函数匹配当前集合中的每个元素,产生一个包含新的jQuery对象

    var arrValue = $('li').map(function () {
        return $(this).text();
    })
    console.log(arrValue)

jQuery.extend([deep,]target[,object1][,objectN])

  • 当我们提供两个或多个对象给$.extend(),对象的所有属性都添加到目标对象(target参数)。
  • 如果只有一个参数提供给$.extend()。这意味着目标参数被省略;在这种情况下,jquery对象本身被默认为目标对象。这样,我们可以在jQuery的命名空间下添加新的功能。这对于插件开发者希望向jquery中添加新函数时是很有用的

目标对象(第一个参数)将被修改,并且将通过$.extend()返回。然而,如果我们想保留原对象,我们可以通过传递一个空对象作为目标对象:
var object = $.extend({},object1,oject2);

在默认情况下,通过$.extend()合并操作不是递归的。

如果第一个对象的属性本身是一个对象或者数组,那么它将完全用第二个对象相同的key重写一个属性。这些值不会被合并。如果将true作为该函数的第一个参数,那么会在对象上进行递归的合并。

使用范例:

    var obj1 = {a:1};
    var obj2 = {b:2,c:3};
    var obj3 = {b:3,d:5};
    $.extend(obj1,obj2); //把obj2扩展到obj1上去,作一个遍历,如果obj2里面有的属性obj1里面也有,会进行覆盖,如果obj1里面没有,会做一次新增
    // obj1 == {a:1,b:2,c:3}
    $.extend(obj1,obj2,obj3);//修改的还是obj1,此时obj1 == {a:1,b:3,c:3,d:5} 已经存在的属性进行覆盖,没有的进行新增

    
//    如果想得到三个属性扩展的值,但是又不想修改obj1的话
    var obj4 = {};
    $.extend(obj4,obj1,obj2,obj3);
    //也可以向下面这么写,直接写个空对象,将扩展完成的对象赋给新定义的对象就好
    var obj5 = $.extend({},obj1,obj2,obj3);

.clone([withDataAndEvents])

.clone方法深度复制所有匹配的元素的集合,包括所有匹配元素,匹配元素的下级元素,文字节点
通常我们将页面上一个元素插入到DOM里一个地方,他会被从老地方带走,类似于剪切的效果。

<div class="ct">
    <div class="goodbye">

        <div class="hello">
            hello
        </div>
        goodbye
    </div>
</div>
<script>
    $('.hello').appendTo($('.goodbye')); // 进行了剪切
</script>

但是如果我们需要的是复制不是剪切,就可以写为:
$('.hello').clone().appendTo('.goodbye');

.index() /.index(selector)/.index(element)

从给定集合中查找特定元素index

<ul>
    <li></li>
    <li class="active"></li>
    <li></li>
    <li></li>
</ul>
<script>
    $('.active').index(); //1

.index()中也可以传入参数,selector或者是element,表示在特定选择器或者元素下的index是多少

.ready(handler)

当DOM准备就绪的时候,指定一个函数执行
等价于下面这两种写法:

$.(document).ready(handler)
$(handler)

实例:

$(function () {
    console.log('ready');
})

jQuery的ajaxAPI用法:

jQuery.ajax([settings])

范例:

    $.ajax({
        url: 'xxx.php',
        method: 'GET',
        data: {
            name: 'bayon',
            age: 24,
            sex: 'male'
        }
    }).done(function(result) {
        console.log(result);
    }).fail(function (jqXHR,textStatus) {
        console.log(textStatus);
    })

关于settings中的具体一些参数参考jquery ajax文档,注意async,beforeSend,cache,complete,dataType

对于jsonp的ajax写法

    $.ajax({
        url: 'deejay',
        dataType: 'jsonp', // dataType写成jsonp
        jsonp: 'callback', // 
        jsonpCallback: 'agfjkhahj',
    })

jQuery.param(obj)

创建一个数组,一个普通的对象,或者一个jQuery对象的序列化表示形式,用于URL查询字符串或者Ajax请求。
使用解析:

    var myObject = {
        a: {
            one: 1,
            two: 2,
            three: 3,
        },
        b: [1,2,3]
    };
    $.param(myObject); //结果为"a%5Bone%5D=1&a%5Btwo%5D=2&a%5Bthree%5D=3&b%5B%5D=1&b%5B%5D=2&b%5B%5D=3"  序列化的对象
    decodeURIComponent($.param(myObject)); //"a[one]=1&a[two]=2&a[three]=3&b[]=1&b[]=2&b[]=3"

.serialize()

用做将提交的表单元素的值编译成字符串,不接受任何参数

    $('form').on('submit',function (event) {
        event.preventDefault();
        console.log($(this).serialize());
    })

jQuery ajax使用举例

实现新闻页面加载:
在进行ajax的书写过程中,要和后端约定好接口名称(如/getNews)请求方式(get/post),然后数据格式要根据实际需求来决定,比如说实现新闻页面,那么返回的应该是一个数组,数组中的每一项都是个对象,存放一些信息,应该是个json对象。
确定好返回数据的大致格式后,前端再看页面具体需要什么信息,即返回数组的每一项中的json中的信息应该包括哪些,在本例中,需要新闻页面的链接url,图片链接url,h2标题中的文字,新闻段落p中的文字,那么前端需要的数据应该是:

    [
        {
            link: '',
            img: '',
            h2: '',
            p: '',
        }
    ]

那么约定好这些之后,进行ajax的书写就不会出错了。
来具体实现新闻页面。
后端代码为:



app.get('/getNews',function(req,res) {
    var news = [
        {
            link: 'http://view.inews.qq.com/a/20160830A02SEB00',
            img: 'http://inews.gtimg.com/newsapp_match/0/530686980/0',
            h2: '中国轰6K研发险些被俄罗斯发动机厂商卡脖子',
            p: '近日,轰6K"战神"轰炸机首次公开亮相。在中国空军长春“追梦空天”活动中,轰6K轰炸机进行了公开展出,配套武器装备逐一亮相。殊不知轰-6K这一战略性的国产战机,险些也被外国供应商卡了脖子!',
        },
        {
            link: 'https://kuaibao.qq.com/s/ENT2017082601127604',
            img: 'http://inews.gtimg.com/newsapp_match/0/1963668798/0',
            h2: '凤凰传奇的玲花素颜长这样 认得出来吗',
            p: '视觉中国讯 8月25日,凤凰传奇玲花现身广州白云机场,素颜现身的她头戴棒球帽,黄色T恤上的老虎图案十分抢眼,下身着白色短裤,大秀美腿,等待保姆车时与助理热聊不断,看似心情相当好! (来自:视觉中国)',
        },
        {
            link: 'https://kuaibao.qq.com/s/20170826A00BDJ00',
            img: 'http://inews.gtimg.com/newsapp_match/0/1963495052/0',
            h2: '59岁冯小刚坦言人生三大遗憾:对不起前妻和徐帆,后悔捧红宝强',
            p: '今年已经59岁的冯小刚人生堪称完美,作为导演,冯小刚执导了《甲方乙方》《大腕》《不见不散》等经典,作为演员,冯小刚凭《老炮》问鼎金马影帝,然而这样完美的人生却也充满遗憾,最近冯小刚就爆出了自己人生中的三大憾事。',
        },
        {
            link: 'https://kuaibao.qq.com/s/20170825A05HUK00',
            img: 'http://inews.gtimg.com/newsapp_match/0/1960889798/0',
            h2: '叛逆17年,害谢霆锋抛弃张柏芝,如今37岁当爸爸过成这样',
            p: '在2000年,陈冠希首次出演电影《特警新人类2》,算是正式进入了娱乐圈,其实在年轻的时候,陈冠希的事业发展相当好,公司给了他不错的资源,无论是在电影还是音乐上,陈冠希都发展得不错。',
        },
        {
            link: 'https://kuaibao.qq.com/s/20170826A003L900',
            img: 'http://inews.gtimg.com/newsapp_match/0/1963334820/0',
            h2: '谢霆锋未婚妻瞬间秒变美食厨娘,做饭有模有样,谁说不如张柏芝?',
            p: '谢霆锋和王菲的早年故事,想必是人尽皆知,当年也是娱乐圈最看好的一对,但是因各种原因各自结婚。',
        },
        {
            link: 'https://view.inews.qq.com/a/SSH2017082605027004',
            img: 'http://inews.gtimg.com/newsapp_match/0/1964287533/0',
            h2: '三兄妹为减轻父母负担离家出走 草丛过夜后被找回',
            p: '8月24日,山西运城盐湖区东留村三兄妹为减轻父母负担离家出走,并在草丛里睡了一晚。26日,运城市公安局盐湖分局工作人经警民联合寻找,三人已被父母接回家。',
        },
        {
            link: 'https://view.inews.qq.com/a/SSH2017082604728808',
            img: 'http://inews.gtimg.com/newsapp_match/0/1964237194/0',
            h2: '女子开车撞上公交车 却爱上了公交司机',
            p: '今天咱们来讲一段爱情故事,故事的主人公是咱济南的一个公交司机小郭,今年在驾驶公交车的时候,被一辆私家车追尾了。',
        }
    ];

    var index = req.query.index;
    var length = req.query.length;

    var sliceNews = news.slice(index*length,(parseInt(index*length))+(parseInt(length)));

    res.send(
        {
            status: 0,
            data: sliceNews,
        }
    )
})

前端代码为:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
        list-style: none;
    }
    a {
        color: #333;
        text-decoration: none;
    }
    .container {
        max-width: 600px;
        margin: 0 auto;
    }
    .item {
        margin-top: 20px;
    }
    .clearfix:after {
        content: '';
        display: block;
        clear: both;
    }
    .item .thumb img {
        width: 50px;
        height: 50px;
    }
    .item .thumb {
        float: left;
    }
    .item h2 {
        margin-left: 60px;
        font-size: 14px;
    }
    .item p {
        margin-left: 60px;
        font-size: 14px;
        margin-top: 10px;
        color: #ccc;
    }
    .load-more {
        margin-top: 20px;
        padding: 8px 16px;
        border: none;
        outline: none;
        cursor: pointer;
    }
    .load-more:hover {
        background: #fe6629;
        border-radius: 5px;
        transition: all .5s;
    }
</style>
<body>
<div class="container">
    <ul class="news">
        <li class="item">
            <a href="#">
                <div class="thumb">
                    <img src="" alt="">
                </div>
                <h2></h2>
                <p></p>
            </a>
        </li>

    </ul>

    <button class="load-more">加载更多</button>
</div>

<script>
    var Pageindex = 0;
    var Pagelength = 2;
    $('.load-more').on('click',function () {
        $.ajax({
            url: '/getNews',
            method: 'get',
            data : {
                index: Pageindex,
                length: Pagelength,
            },
        }).done(function (ret) {
//          ret为接收到的后端返回的数据
            if (ret.status === 0) { //返回数据我们和后端约定好加个status值来确定是否正常
                render(ret.data); // 写一个渲染函数把后端拿到的数据append到html上
                Pageindex++;
            }
            else {
                alert('后端获取新闻出错');
            }
        }).fail(function () {
            alert('系统异常');
        })

        function render (arr) { // 设置渲染函数,把后端得到的数据拼接成html字符串然后放到页面上
            if (arr.length === 0) {
                $('.load-more').remove();
                $('.container').append($('<p>没有更多数据了</p>'));
            }
            var html = ''; //进行拼接html字符串
            $.each(arr, function () { // 遍历得到的数据
                html += '<li class="item">';
                html += '<a href="' + this.link + '">';
                html += '<div class="thumb"> ![]( ' + this.img + ' ) </div>';
                html += '<h2>' + this.h2 + '</h2>';
                html += '<p>' + this.p + '</p>';
                html += '</a></li>';
            })
            $('.news').append(html);
        }
    })



</script>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 1. Jquery 中, $(document).ready()是什么意思?和window.onload 的区别?...
    INTERNALENVY阅读 283评论 0 0
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,321评论 0 2
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,157评论 0 1
  • Attribute: $("p").addClass(css中定义的样式类型); 给某个元素添加样式 $("img...
    扑克脸_457e阅读 556评论 0 1
  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    程序员poetry阅读 16,634评论 18 503