知己知彼,面進阿里 ——不屈小強javascript
整理了這些做爲下階段讀源碼前的知識儲備,同時分享給你們。共勉。css
總述
jQuery 框架提供了不少方法,但大體上能夠分爲3 大類:html
- 獲取jQuery 對象的方法
- 在jQuery 對象間跳轉的方法
- 獲取jQuery 對象後調用的方法
獲取 jQuery 對象
是怎樣獲取jQuery 對象。大體來講,是經過最核心的$()
方法,將頁面上的元素(或者在頁面上不存在的 html 片斷)包裝成 jQuery 對象。
$()方法
裏面支持的語法又包括:java
- 分別是表達式(包括類表達式.,id 表達式#,元素表達式等)
- 符號(包括後代符號space,next 符號+等)
- 過濾器(包括:過濾器和[]過濾器)
- 如今顯然還有更多
經過以上組合,經過選擇器 $()
可」查詢「獲得 jQuery 對象(或者jQuery 對象的集合)。jquery
對象跳轉
是在jQuery 對象間的跳轉。也就是說,已經獲得了一個jQuery 對象,但並非想要的,那麼能夠經過一系列的跳轉方法,好比parent()、next()、children()、find()等,或者過濾篩選的方法,好比eq、filter()、not()等,來獲得最終想要操做的jQuery 對象。web
用跳轉和過濾方式獲得的jQuery 結果,每每經過比較複雜的表達式組合,能夠達到一樣的目的。
好比說 $("div").eq(3)
,也能夠用$("div:eq(3)")
達到一樣的目的。
又好比說$("div").find("span")
,能夠用$("div span")
取到一樣的元素。
方法是很靈活的,要根據具體的狀況來選擇。根據經驗來講,HTML 頁面寫得越規範,使用 jQuery 就越簡單。ajax
還有一種狀況,在獲得了jQuery()對象以後,想要判斷其是否知足條件,那麼能夠調用 is()、hasClass()等方法,返回一個boolean 值,進行後續的判斷。這類方法也能夠歸到這類。express
方法調用
在獲取準確的 jQuery 對象以後,調用其上的各類方法,來進行操做。這一步反而是比較簡單的了。
後面就是對 jQuery 框架各類方法的簡要介紹。api
經常使用API
$(…);
$();
$(expression);
$(html)
$(element)
$(*)
jQuery 對象獲取
jQuery.index(element);
jQuery.each(function); /** * 返回 jQuery 對象集合的大小 */ jQuery.size(); /** * 至關於size()方法 */ jQuery.length /** * 獲取原生 DomElement 對象的 Array, * 即將 jQuery 對象轉成 數組對象, * 雖然 jQuery 對象也有 length 屬性,且可用下標讀寫 * 但並不是是數組對象。 */ jQuery.get() /** * 獲取原生 DomElement 對象 */ jQuery.get(index) /** * 獲取 jQuery 對象集合中的一個 jQuery 對象 */ jQuery.eq(position)
Data 相關方法
在匹配的元素身上存值(store data), .data()
方法容許在咱們以一種安全的方式附加數據到 dom 元素,不會產生循環引用和內存泄露。數組
jQuery.data(name)
jQuery.data(name, value)
jQuery.removeData(name)
$( "body" ).data( "foo", 52 );
$( "body" ).data( "bar", { myType: "test", count: 40 } );
$( "body" ).data( { baz: [ 1, 2, 3 ] } );
$( "body" ).data( "foo" );
$( "body" ).data();
選擇器
$("table tr td");
$("#id > span");
$("label + input")
$("#prev ~ div")
基本的過濾器
$(":header");
$("tr:odd");
$("tr:even");
$(":animated");
$("div:animated");
$("tr:first");
$("tr:last");
$("input:not(:checked)");
$("td:gt(4)");
$("td:lt(4)");
$("td:eq(4)");
$("td").eq(4);
內容過濾選擇器
$("div:contains('John')");
$("td:empty");
$("div:has(p)");
$("td:parent");
可見性過濾器
$("span:hidden");
$("span:visible");
關於可見性,這裏須要額外說明的。在老版本的 jQuery 中 visibility:hidden;
是認爲不可見的,我有證據,
Sizzle.selectors.filters.hidden = function(elem){
return "hidden" === elem.type ||
jQuery.css(elem, "display") === "none" ||
jQuery.css(elem, "visibility") === "hidden";
};
這段代碼出自 jquery-1.3.1.js
,然而到近代的版本中(在1.3.2就改了)
jQuery.expr.filters.hidden = function( elem ) {
var width = elem.offsetWidth,
height = elem.offsetHeight;
return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
};
簡單的說就是:若是元素佔用空間了,就認爲是可見的。只要不是0的都算可見的。
因此,visibility:hidden;
或者 opacity:0;
因爲佔有空間,它們算事「可見」的。
屬性過濾器
$("div[id]");
$("input[name$='bc']");
$("input[name^='letter']");
$("input[tag*='man']");
$("input[abc='def']");
$("input[title!='722']");
$("input[id][gender$='man']");
孩子過濾器
$("ul li:nth-child(2)");
$("div span:firstChild");
$("div span:lastChild");
表單過濾器
$(":button");
$("form :checkbox");
$("input:checkbox");
$(":file");
$(":hidden");
$(":input");
$(":text");
$(":password");
$(":radio");
$("input:radio");
$(":image");
$(":reset");
$(":submit");
$("input:enabled");
$("input:disabled");
$("input:checked");
$("input:selected");
屬性相關的方法
jQuery.removeAttr(name);
jQuery.attr(name);
jQuery.attr(key,value);
jQuery.attr(properties);
$("img").attr({
src: "/images/hat.gif",
title: "jQuery",
alt: "jQuery Logo"
});
jQuery.attr(key,function); // function 計算出的結果,賦給key // 在回調函數中 function callback(index) {
}
類相關的操做
jQuery.toggleClass(class);
jQuery.toggleClass(class,switch);
$( "div.foo" ).toggleClass(function() {
if ( $( this ).parent().is( ".bar" ) ) {
return "happy";
} else {
return "sad";
}
});
jQuery.hasClass(class);
jQuery.removeClass(class);
jQueyr.addClass(class);
html相關的操做
jQuery.html();
jQuery.html(val);
文本相關的方法
jQuery.text();
jQuery.text(val);
值相關的操做
jQuery.val();
jQuery.val(val);
jQuery.val(array);
在jQuery 對象之間查找
須要弄清: 文本和節點是兩回事,在 DOM 裏就分開了。
jQuery.parent(expr);
$("span").parent();
$("span").parent(". class");
jQuery.parents(expr);
jQuery.children(expr);
jQuery.contents();
jQuery.prev();
jQuery.prevAll();
jQuery.next();
jQuery.nextAll();
jQuery.siblings();
jQuery.add(expr);
$("div").add("p");
jQuery.find(expr);
$("body").find("div");
jQuery.find("body div");
jQuery.filter(expr);
串聯方法
jQuery.andSelf();
$("div").find("p").andSelf(); 這樣結果集中包括全部的<p>和<div>。若是是$("div").find("p"),那就只有<p>,沒有<div>
jQuery.end();
$("p").find("span").end();
DOM 文檔操做方法
a.append(b);
$("div").append("<span>hello</span>");
a.appendTo(b);
$("<span>hello</span>").appendTo("#div");
$("span").appendTo("div");
jQuery.prepend(content);
a.prependTo(b);
jQuery.after(content); 注意是 content,在外部插入,插入到後面,好比
$("#foo").after("<span>hello</span>");
jQuery.insertAfter(selector);
$("<span>hello</span>").insertAfter("#foo");
jQuery.before(content);
jQuery.insertBefore(selector);
jQuery.wrapInner(html);
$("p").wrapInner("<span></span>");
jQuery.wrap(html);
$("p").wrap("<div></div>");
jQuery.wrapAll(html);
jQuery.replaceWith(content); 好比
$(this).replaceWith("<div>"+$(this).text()+"</div>");
jQuery.replaceAll(selector);
$("<div>hello</div>").replaceAll("p");
jQuery.empty();
$("p").empty();
jQuery.remove(expr);
$("p").remove();
jQuery.detach();
jQuery.clone([withDataAndEvents ] ));
CSS 相關方法
jQuery.css(name);
$("p").css("color")
jQuery.css(object);
$("p").css({
"color":"red",
"border":"1px red solid"
});
jQuery.css(name,value);
$("p").css("color","red");
位置計算相關方法
jQuery.scrollLeft();
jQuery.scrollTop();
jQuery.offset();
jQuery.position();
[object Object] {
left: 34.546875,
top: 11
}
這裏須要額外補充:
The .offset() method allows us to retrieve the current position of an element relative to the document. Contrast this with .position(), which retrieves the current position relative to the offset parent.
簡單來講就是:offset 是相對於 document,而 position 相對於父元素。
寬度和高度計算相關方法
這組方法須要結合CSS 的盒子模型來理解,margin 始終不參與計算
jQuery.height();
jQuery.innerHeight();
jQuery.outerHeight();
jQuery.width();
jQuery.innerWidth();
jQuery.outerWidth();
瀏覽器及特性檢測
$.support,能夠檢測當前瀏覽器是否支持下列屬性,返回boolean。包括boxModel、cssFloat、
opacity、tbody 等
$.browser,檢測當前瀏覽器類型,返回一個map,其中可能的值有safari、opera、msie、mozilla
數據緩存方法
$.data(elem, name);
$.data(elem, name, value);
$.removeData(elem, name);
$.removeData(elem);
工具方法
$.isArray(obj);
$.isFunction(obj);
$.trim(str);
$.( value, array [, fromIndex ] )
$.inArray(value, array);
$.inArray(123, ["john",1,123,"f"]);
$.unique(array);
總結
最後,因爲篇幅限制,把最重要的 事件綁定
和 ajax
獨立出來,而且也還沒寫完呢,先到這裏。