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