jQuery ajax常見問題

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

.ready(handler)

當DOM準備就緒的時候,指定一個函數執行
等價于下面這兩種寫法:

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

實例:

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

2,$node.html()和$node.text()的區別?

$node.html()在沒有參數的時候,獲取集合中的第一個匹配元素的HTML內容,當有參數的時候表示,設置每個匹配元素的html內容;
$node.text()在沒有參數的時候,獲取集合中每個元素的文本內容,包括后代(內容從父元素往子元素排列),有參數的時候,設置匹配元素集合中的每個元素的文本內容為指定文本內容。

3,$.extend 的作用和用法?

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);

4, jQuery 的鏈式調用是什么?

鏈式調用:使用jQuery方法時,對象方法返回的是對象本身,可以調用對此對象的其他jQuery方法,實現連續調用多個方法
例:$(this).addClass('active').siblings().removeClass('active')

5, jQuery 中 data 函數的作用

在匹配元素上存儲任意相關的數據 或 返回匹配的元素集合中的第一個元素的給定名稱的數據存儲的值。

  • data(key,value
    描述:在匹配元素上存儲任意相關數據
$("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]}

6,寫出以下功能對應的 jQuery 方法:

  • 給元素 $node 添加 class active,給元素 $noed 刪除 class active
    $node.addClass('active');
    $node.removeClass('active');
  • 展示元素$node, 隱藏元素$node
$node.hide();
 $node.show()
  • 獲取元素$node 的 屬性: id、src、title, 修改以上屬性
    $node.attr('id','newID');
    $node.attr('src','newsrc');
    $node.attr('tile','newtitle');
  • 給$node 添加自定義屬性data-src
    $node.data('data-src','src');
  • 在$ct 內部最開頭添加元素$node
    $ct.prepend($node);
  • 在$ct 內部最末尾添加元素$node
    $ct.append($node);
  • 刪除$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 );

  • 獲取窗口滾動條垂直滾動距離
    $(window).scrollTop()
  • 獲取$node 到根節點水平、垂直偏移距離
    $node.offset().left
    $node.offset().top
  • 修改$node 的樣式,字體顏色設置紅色,字體大小設置14px
    $node.css({color:'red,fontSize:'14px'})
  • 遍歷節點,把每個節點里面的文本內容重復一遍
$node.each(function(){
    $(this).text().+$(this).text();
});
  • 從$ct 里查找 class 為 .item的子元素
    $ct.find('.item')
  • 獲取$ct 里面的所有孩子
    $ct.children()
  • 對于$node,向上找到 class 為'.ct'的父親,在從該父親找到'.panel'的孩子
    $node.parents('.ct').find('.panel')
  • 獲取選擇元素的數量
    $('#id').length
  • 獲取當前元素在兄弟中的排行
    $('ul').index();

7,用jQuery實現以下操作

  • 當點擊$btn 時,讓 $btn 的背景色變為紅色再變為藍色
  • 當窗口滾動時,獲取垂直滾動距離
  • 當鼠標放置到$div 上,把$div 背景色改為紅色,移出鼠標背景色變為白色
  • 當鼠標激活 input 輸入框時讓輸入框邊框變為藍色,當輸入框內容改變時把輸入框里的文字小寫變為大寫,當輸入框失去焦點時-
  • 去掉邊框藍色,控制臺展示輸入框里的文字
  • 當選擇 select 后,獲取用戶選擇的內容
    demo

8,用 jQuery ajax 實現加載更多

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!--<script src="../jquery-3.2.1.min.js"></script>-->
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
        list-style: none;
    }
    #ct li {
        border: 1px solid #ccc;
        padding: 10px;
        margin-top: 10px;
        margin-left: 8px;
        margin-right: 8px;
        cursor: pointer;
    }
    #load-more {
        display: block;
        margin: 10px auto;
        text-align: center;
        cursor: pointer;
    }
    #load-more img {
        width: 40px;
        height: 40px;
    }
    .btn {
        display: inline-block;
        height: 40px;
        line-height: 40px;
        width: 80px;
        border: 1px solid #e27272;
        border-radius: 3px;
        text-align: center;
        text-decoration: none;
        color: #e27272;
    }
    .btn:hover,li:hover {
        background: green;
        color: #fff;
    }
</style>
<body>
<ul id="ct">
    <li>內容1</li>
    <li>內容2</li>
    <!--加載更多,從后端得到更多的li放到ul中就可以了-->
</ul>
<a href="javascript:void(0)" id="load-more" class="btn">加載更多</a>

<script>
    var currentIndex = 2;
    var currentLength = 5;

    $('#load-more').on('click',function () {
        $.ajax({
            url: '/loadMore',
            method: 'GET',
            data: {
                index: currentIndex,
                length: currentLength,
            }
        }).done(function (ret) {
            render(ret);
            currentIndex += currentLength;
        })
    })
    function render (data) {
        var html = '';
        var $data = $(data);
        $data.each(function (i,e) {
            html += '<li>' + e + '</li>';
        })
        $('#ct').append(html);
    }
</script>
</body>
</html>

router.js

app.get('/loadMore',function (req,res) {
    var index = req.query.index;
    var length = req.query.length;
    var data = [];
    for (var i = 0; i < length; i ++ ) {
        index++;
        data[i] = '內容' + parseInt(index);
    }
    res.send(data);
})
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容