美文网首页
jQuery ajax

jQuery ajax

作者: 饥人谷_罗丹 | 来源:发表于2017-08-15 14:13 被阅读0次

    题目1: jQuery 中, $(document).ready()是什么意思?

    描述:当DOM准备就绪的时候,指定一个函数来执行。
    虽然JavaScript提供了load事件,当页面呈现时执行这个事件,直到所有东西,如图像已经完全接收前,此事件不会被触发。大多数情况下,只要DOM结构已完全加载时,脚本就可以运转了。传递处理函数给ready()方法,能保证DOM准备就绪好后执行这个函数,因此,这里是进行多有其他事件绑定及运行其他jQuery代码最佳的地方。当脚本依赖css属性值时,需要特别注意,保证外部的样式或内嵌样式被加载完后执行,在调用脚本。
    如果执行代码需要在元素被加载之后才使用,(例如,取得图片大小需要在图片加载之后才知道),就需要将这样的代码放到load事件中去。

    ready()方法通常和<body onload="">属性时不兼容的。如果load必须使用,要么就不要使用ready(),要么使用
    jQuery的load()方法向window或一些指定元素绑定load事件。
    

    一下三个语法全部等价:

    • $(document).ready(handler)
    • $().ready(handler)
    • $(handler)
    例子:
    .ready()方法通常用于一个匿名函数:
      $(document).ready(function(){
          //handler for .ready() called.
      });
    这等价与调用:
      $(function(){
          //handler for .ready() called.
      });
    

    题目2: $node.html()和$node.text()的区别?

    $node.html()在没有参数的时候,获取集合中的第一个匹配元素的HTML内容,当有参数的时候表示,设置每个匹配元素的html内容;
    $node.text()在没有参数的时候,获取集合中每个元素的文本内容,包括后代(内容从父元素往子元素排列),有参数的时候,设置匹配元素集合中的每个元素的文本内容为指定文本内容。

    题目3: $.extend 的作用和用法?

    描述:将两个或更多的内容合并到第一个对象。

    jQuery.extend(target[,object1][,objectN])   1.0版本
    target
    类型:object
    一个对象,如果附加的对象被传递给这个方法那么它将接收新的属性,如果它是唯一的参数将扩展jQuery的命名空间。
    object1
    类型:object
    一个对象,它包含额外的属性合并到第一个参数
    objextN
    类型:object
    包含额外的属性合并到第一个参数
    
    jQuery.extend([deep],target[,object1][,objectN])  1.1.4版本
    deep
    类型:Boolean
    如果是true,合并成为递归(又叫做深拷贝)。
    target
    类型:object
    一个对象,如果附加的对象被传递给这个方法那么它将接收新的属性,如果它是唯一的参数将扩展jQuery的命名空间。
    object1
    类型:object
    一个对象,它包含额外的属性合并到第一个参数
    objectN
    类型:object
    包含额外的属性合并到第一个参数
    

    当我们提供两个或多个对象给$.extend(),对象的所有属性都添加在目标对象(target参数)。
    请记住,目标对象将被修改,并且将通过$.extend()返回。然而,如果想保留原对象,我们可以通过传递一个空对象作为目标对象:

    var object = $.extend({}, object1, object2);
    

    在默认情况下,通过$.extend()合并操作不是递归(深拷贝)的;如果第一个对象的属性本身是一个对象或数组,那么它将完全用第二个对象相同的 key 重写一个属性。这些值不会合并。如果将true做为该函数的第一个参数,那么会在对象上进行递归的合并。
    注意:第一个参数不支持false。

    例子:
    var object1 = {
        red: 100,
        box: { height: 100, weight: 20 , width: 100},
        background: 10
    };
    
    var object2 = {
        box: { height: 200,  width: 200},
        background: 97
    };
    
    $.extend(object1, object2);   合并两个对象,并修改第一个对象。
    // object1 = {
           red: 100,
           box: { height: 200,  width: 200},
           background: 97
       }
    
    $.extend(true, object1, object2);  采用递归方式合并两个对象,并修改第一个对象。
    // object2 = {
           red: 100,
           box: { height: 200, weight: 20,  width: 200},
           background: 97
      }
    

    题目4: jQuery 的链式调用是什么?

    对同意个jQuery对象,我们可以用$(this).parents().siblings().addClass('hover')这样简化代码。
    不用链式调用:

    var $parents = $(this).parents();
    var $siblings = $parents.siblings();
    $siblings.addClass('hover');
    

    题目5: jQuery 中 data 函数的作用

    在匹配元素上存储任意相关的数据 或 返回匹配的元素集合中的第一个元素的给定名称的数据存储的值。
    contents:

    • .data(key, value)
      • .data(key, value)
      • .data(obj)
    • .data(key)
      • .data(key)
      • .data()

    .data(key, value)

    描述:在匹配元素上存储任意相关数据

    .data(key, value)
        key    类型:String     一个字符串,用于存储数据的名称。
        value    类型:Object    新的数据值,它可以是任意的JavaScript数据类型,包括Array、Object.
    .data(obj)
        obj   type: Object    一个用于更新数据的 键/值对
    
    例子:
    $("body").data("foo" , 18);
    $("body").data("abc", { name: "text", sex: 20 });
    $("body").data({cba:[a,b,c]});
    $("body").data("foo"); // 18
    $("body").data() // {foo: 18, abc: {name: "text", sex: 20}, cba:[a,b,c]}
    

    .data(key)

    描述:返回匹配的元素集合中的第一个元素的给定名称的数据存储的值

    .data(key)
        key  type: String    存储数据名。
    .data()
        这个方法不接受任何参数。得到匹配元素的所有存储的数据 
    
    例子:
    $('body').data('foo'); // undefined
    $('body').data(); // undefined
    
    

    题目6:写出以下功能对应的 jQuery 方法:

    • 给元素 $node 添加 class active,给元素 $noed 删除 class active
    $node.addClass('active'); 添加
    $node.removeClass('active'); 删除
    
    • 展示元素$node, 隐藏元素$node
    普通
    $node.hide(); 隐藏
    $node.show(); 显示
    $node.toggle(); 切换隐藏和显示
    
    渐变
    $node.fadeOut(); 隐藏
    $node.fadeIn(); 显示
    $node.fadeToggle(); 通过匹配的元素的不透明度动画,来显示或隐藏它们,方法执行匹配元素的不透明度动画。
    
    滑动
    $node.slideDown(); 显示
    $node.slideUp(); 隐藏
    $node.slideToggle(); 滑动的方式来切换显示或隐藏
    
    • 获取元素$node 的 属性: id、src、title, 修改以上属性
    获取
    $node.attr('id');
    $node.attr('src');
    $node.attr('title');
    修改
    $node.attr('id', 'newId');
    $node.attr('src', '/hello/a.jpg');
    $node.attr('title', 'jQuery');
    
    • 给$node 添加自定义属性data-src
    $node.attr('data-src', '/hello/a.jpg');
    
    • 在$ct 内部最开头添加元素$node
    $ct.prepend($node);
    $node.prependTo($ct);
    
    • 在$ct 内部最末尾添加元素$node
    $ct.append($node);
    $node.appendTo($ct);
    
    • 删除$node
    $node.remove();
    
    • 把$ct里内容清空
    $ct.empty();
    
    • 在$ct 里设置 html <div class="btn"></div>
    $ct.html(' <div class="btn"></div>');
    
    • 获取、设置$node 的宽度、高度(分别不包括内边距、包括内边距、包括边框、包括外边距)
    获取
    不包括内边距
    $node.height();
    $node.width();
    包括内边距
    $node.innerHeight();
    $node.innerWidth();
    包括边框
    $node.outerHeight();
    $node.outerWidth();
    包括边框
    $node.outerHeight(true);
    $node.outerWidth(true);
    
    设置
    不包括内边距
    $node.height( '100px' );
    $node.width( '100px' );
    包括内边距
    $node.innerHeight( '100px' );
    $node.innerWidth( '100px' );
    包括边框
    $node.outerHeight( '100px' );
    $node.outerWidth( '100px' );
    包括边框
    $node.outerHeight( '100px', true );
    $node.outerWidth( '100px', true );
    
    • 获取窗口滚动条垂直滚动距离
    $(widnow).scrollTop();
    
    • 获取$node 到根节点水平、垂直偏移距离
    获取
    $node.offset().left 水平
    $node.offset().top   垂直
    设置
    $node.offset( {left: 100 , top: 100} ); 设置 $node 水平垂直距离
    
    • 修改$node 的样式,字体颜色设置红色,字体大小设置14px
    $node.css({
        'color': 'red',
        'font-size': '14px'
    });
    
    $node.attr({
        'color': 'red',
        'font-size': '14px'
    });
    
    • 遍历节点,把每个节点里面的文本内容重复一遍
    $node.each(function(){
        $(this).text().+$(this).text();
    });
    
    • 从$ct 里查找 class 为 .item的子元素
    $ct.children('.item');
    $ct.find('.item');
    $ct.has('.item');
    
    • 获取$ct 里面的所有孩子
    $ct.children();
    
    • 对于$node,向上找到 class 为'.ct'的父亲,在从该父亲找到'.panel'的孩子
    $node.parents('.ct').find('.panel');
    $node.parents('.ct').children('.panel');
    
    • 获取选择元素的数量
    $('li').length;
    
    • 获取当前元素在兄弟中的排行
    $('ul').index($(this));
    

    题目7:用jQuery实现以下操作

    • 当点击$btn 时,让 $btn 的背景色变为红色再变为蓝色
    $btn.on('click', function(){
        $(this).animate({
            'background-color': 'red',
        },1000, function(){
              'background-color': 'bule',
          });
    });
    
    • 当窗口滚动时,获取垂直滚动距离
    $(window).scrollTop(); 
    
    • 当鼠标放置到$div 上,把$div 背景色改为红色,移出鼠标背景色变为白色
    $div.on('hover', function(){
        $(this).css('background-color', 'red');
    }, function(){
        $(this).css('backgrund-color', '#fff')
    });
    
    • 当鼠标激活 input 输入框时让输入框边框变为蓝色,当输入框内容改变时把输入框里的文字小写变为大写,当输入框失去焦点时去掉边框蓝色,控制台展示输入框里的文字
    
    $('input').on('focusin', function(){
        $(this).css('border', 'blue');
        var $text = $(this).val();
        $text.toUpperCase();
    });
    
    $('input').on('focusout', function(){
        $(this).removeAttr('border');
        console.log( $(this).val().toUpperCase());
    });
    
    • 当选择 select 后,获取用户选择的内容
    $('div').select(function(){
       console.log( $(this).text() );
    })
    

    题目8: 用 jQuery ajax 实现如下效果。当点击加载更多会加载数据展示到页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>加载更多</title>
        <style>
          body,
          ul,
          li,
          a {
              margin: 0;
              padding: 0;
          }
    
          ul,
          li {
              list-style: none;
          }
            
          a {
              text-decoration: none;
          }
    
          #load-more {
              display: block;
              margin: 30px auto 0 auto;
              text-align: center;
              cursor: pointer;
          }
          
          #load-more img {
              width: 40px;
              height: 40px;
          }
    
          #ct li {
              margin: 10px 20px;
              padding: 10px;
              background: #ccc;
              border-radius: 4px;
              cursor: pointer;
          }
    
          .btn {
              height: 40px;
              line-height: 40px;
              width: 160px;
              background: orange;
              border-radius: 4px;
              color: #333;
          }
    
           #ct .hover {
              background: #c78;
              color: #000;
          } 
    
    
        </style>
    </head>
    <body>
        <ul id="ct">
            <li>内容1</li>
            <li>内容2</li>
            <li>内容3</li>
            <li>内容4</li>
            <li>内容5</li>
        </ul>
        <a href="#" class="btn" id="load-more">
          加载更多
        </a>
        <script src = 'http://apps.bdimg.com/libs/jquery/1.9.1/jquery.js'></script>
        <script>
            //定义接口
            /*
            url: '/loadMore'
            type: 'get'
            dataType: 'json'
            入参:data: {
                index: 5
                len: 5
            }
            回参:{
                status: 1 正常状态 0 失败状态
                data:{
                    status: 1
                    data: [新闻1,新闻2,新闻3,新闻4,新闻5]
                }
            }
    
            */
            $loadMore = $('#load-more');
            $ct = $('#ct');
    
            idx = 6;
            
            //鼠标放置上去和移除的样式, 这里由于 Li是动态添加的,所以必须要事件代理
            $('#ct').on('mouseenter', 'li', function(){
                $(this).addClass('hover');
            });
            $('#ct').on('mouseleave', 'li', function(){
                $(this).removeClass('hover');
            });
    
            $loadMore.on('click',function(e){
                e.preventDefault(); // 取消a的默认事件
    
                if($(this).data('isloading')){
                    return;
                };
    
                $(this).data('isloading', true)           // 设置一个状态锁,防止数据加载回来之前用户多次点击
                       .html("<img src = 'loading.gif'>");
    
                $.ajax({
                    url: '/loadMore',
                    datatype: 'json',
                    type: 'get',
                    data: {
                        index: idx,
                        len: 5
                    },
                    success: function(json){
                        onSuccess(json);
                    },
                    error: function(){
                        onError();
                    }
                });
    
                function onSuccess(json){
                    $loadMore.data('isloading', false)
                             .text('加载更多');
                    if(json.status === 1){
                        append(json.data);
                        idx += 5;
                    }else{
                        alert('数据出错');
                    }
                };
    
                function onError(){
                    $loadMore.data('isLoading', false)
                                .text('加载更多');            //链式调用,换行也没关系,对齐好看些
                    alert('系统异常');
                }
    
                function append(arr){
                    var html = '';
                    for(var i = 0; i < arr.length; i++){
                        html += '<li>' + arr[i]+ '</li>';
                    };
                    $ct.append(html);
                }
            });
        </script>
    </body>
    </html>
    
    模拟服务器
    app.get('/loadMore' , function(req, res){
        var curIndex= req.query.index;
        var len = req.query.len;
        var Obj = {
            status: 1,
            data: []
        };
        
        for(var i = 0; i < len; i++) {
           Obj.data.push('新闻'+ (parseInt(curIndex) + i));
        }
        res.header("Access-Control-Allow-Origin", "*");
        res.send(Obj);
    
    });
    
    175159135.gif

    相关文章

      网友评论

          本文标题:jQuery ajax

          本文链接:https://www.haomeiwen.com/subject/swiyrxtx.html