更新時(shí)間:2016年08月29日17時(shí)13分 來源:傳智播客Java培訓(xùn)學(xué)院 瀏覽次數(shù):
JavaScript 是客戶端腳本的標(biāo)準(zhǔn)語言,而 jQuery 使得編寫 JavaScript 更加簡單。你可以只用寫幾行的jQuery 代碼就能實(shí)現(xiàn)更多的東西. 它是經(jīng)常被用到的 JavaScript 庫之一,并且現(xiàn)在已經(jīng)很少有不用jQuery 而使用原生 JavaScript 的新項(xiàng)目了。這對于作為一個(gè) Java web 開發(fā)者的你而言意味著你會在一場Java web開發(fā)面試中發(fā)現(xiàn)許多jQuery的面試問題.
早些時(shí)候,絕大部分都是 HTTP, HTML, CSS 以及 JavaScript,但最近開始,除了 JavaScript 基礎(chǔ)之外,人們也希望知道你是否熟悉 jQuery。這16個(gè)jQuery的問題是為web開發(fā)者準(zhǔn)備的,且也能夠非常方便你在參加一次電話或者視頻一輪的面試之前糾正一些關(guān)鍵的概念。如果你是 jQuery 新手,那么它也能夠幫助你更加好的理解基礎(chǔ)知識,并激勵(lì)你去發(fā)現(xiàn)更多東西。
$() 函數(shù)是 jQuery() 函數(shù)的別稱,乍一看這很怪異,還使 jQuery 代碼晦澀難懂。一旦你適應(yīng)了,你會愛上它的簡潔。$() 函數(shù)用于將任何對象包裹成 jQuery 對象,接著你就被允許調(diào)用定義在 jQuery 對象上的多個(gè)不同方法。你甚至可以將一個(gè)選擇器字符串傳入 $() 函數(shù),它會返回一個(gè)包含所有匹配的 DOM 元素?cái)?shù)組的 jQuery 對象。這個(gè)問題我已經(jīng)見過好幾次被提及,盡管它非?;A(chǔ),它經(jīng)常被用來區(qū)分一個(gè)開發(fā)人員是否了解 jQuery。
另一個(gè)重要的 jQuery 問題是基于選擇器的。jQuery 支持不同類型的選擇器,例如 ID 選擇器、class 選擇器、標(biāo)簽選擇器。鑒于這個(gè)問題沒提到 ID 和 class,你可以用標(biāo)簽選擇器來選擇所有的 div 元素。jQuery 代碼:$("div"),這樣會返回一個(gè)包含所有 5 個(gè) div 標(biāo)簽的 jQuery 對象。更詳細(xì)的解答參見上面鏈接的文章。
如果你用過 CSS,你也許就知道 ID 選擇器和 class 選擇器之間的差異,jQuery 也同樣如此。ID 選擇器使用 ID 來選擇元素,比如 #element1,而 class 選擇器使用 CSS class 來選擇元素。當(dāng)你只需要選擇一個(gè)元素時(shí),使用 ID 選擇器,而如果你想要選擇一組具有相同 CSS class 的元素,就要用 class 選擇器。在面試過程中,你有很大幾率會被要求使用 ID 選擇器和 class 選擇器來寫代碼。下面的 jQuery 代碼使用了 ID 選擇器和 class 選擇器:
正如你所見,從語法角度來說,ID 選擇器和 class 選擇器的另一個(gè)不同之處是,前者用字符”#”而后者用字符”.”。更詳細(xì)的分析和討論參見上面的答案鏈接。
這是一個(gè)事件處理問題。jQuery為按鈕點(diǎn)擊之類的事件提供了很好的支持。你可以通過以下代碼去隱藏一個(gè)通過ID或class定位到的圖片。你需要知道如何為按鈕設(shè)置事件并執(zhí)行hide() 方法,代碼如下所示:
我喜歡這個(gè)問題,因?yàn)楹苜N近實(shí)際使用,代碼也不復(fù)雜。
這個(gè)問題很重要,并且常常被問到。 ready() 函數(shù)用于在文檔進(jìn)入ready狀態(tài)時(shí)執(zhí)行代碼。當(dāng)DOM 完全加載(例如HTML被完全解析DOM樹構(gòu)建完成時(shí)),jQuery允許你執(zhí)行代碼。使用$(document).ready()的明顯好處在于它適用于所有瀏覽器,jQuery幫你解決了跨瀏覽器的難題。需要進(jìn)一步了解的用戶可以點(diǎn)擊 answer鏈接查看詳細(xì)討論。
這個(gè)問答是緊接著上一個(gè)的。JavaScript window.onload 事件和 jQuery ready 函數(shù)之間的主要區(qū)別是,前者除了要等待 DOM 被創(chuàng)建還要等到包括大型圖片、音頻、視頻在內(nèi)的所有外部資源都完全加載。如果加載圖片和媒體內(nèi)容花費(fèi)了大量時(shí)間,用戶就會感受到定義在 window.onload 事件上的代碼在執(zhí)行時(shí)有明顯的延遲。
另一方面,jQuery ready() 函數(shù)只需對 DOM 樹的等待,而無需對圖像或外部資源加載的等待,從而執(zhí)行起來更快。使用 jQuery $(document).ready() 的另一個(gè)優(yōu)勢是你可以在網(wǎng)頁里多次使用它,瀏覽器會按它們在 HTML 頁面里出現(xiàn)的順序執(zhí)行它們,相反對于 onload 技術(shù)而言,只能在單一函數(shù)里使用。鑒于這個(gè)好處,用 jQuery ready() 函數(shù)比用 JavaScript window.onload 事件要更好些。
這是面試?yán)锉容^棘手的 jQuery 問題之一。這是個(gè)基礎(chǔ)的問題,但是別期望每個(gè) jQuery 初學(xué)者都知道它。你能用下面的 jQuery 選擇器獲取所有具備 multiple=true 的 <select > 標(biāo)簽的選中項(xiàng):
這段代碼結(jié)合使用了屬性選擇器和 :selected 選擇器,結(jié)果只返回被選中的選項(xiàng)。你可按需修改它,比如用 id 屬性而不是 name 屬性來獲取 <select> 標(biāo)簽。
each() 函數(shù)就像是 Java 里的一個(gè) Iterator,它允許你遍歷一個(gè)元素集合。你可以傳一個(gè)函數(shù)給 each() 方法,被調(diào)用的 jQuery 對象會在其每個(gè)元素上執(zhí)行傳入的函數(shù)。有時(shí)這個(gè)問題會緊接著上面一個(gè)問題,舉個(gè)例子,如何在 alert 框里顯示所有選中項(xiàng)。我們可以用上面的選擇器代碼找出所有選中項(xiàng),然后我們在 alert 框中用 each() 方法來一個(gè)個(gè)打印它們,代碼如下:
其中 text() 方法返回選項(xiàng)的文本。
你可以用 jQuery 方法 appendTo() 將一個(gè) HTML 元素添加到 DOM 樹中。這是 jQuery 提供的眾多操控 DOM 的方法中的一個(gè)。你可以通過 appendTo() 方法在指定的 DOM 元素末尾添加一個(gè)現(xiàn)存的元素或者一個(gè)新的 HTML 元素。
這是另一個(gè)關(guān)于選擇器的 jQuery 面試題。就像其他問題那樣,只需一行 jQuery 代碼就能搞定。你可以使用下面這個(gè) jQuery 代碼片段來選擇所有嵌套在段落(<p>標(biāo)簽)內(nèi)部的超鏈接(<a>標(biāo)簽)……
這對于很多 jQuery 初學(xué)者來說是一個(gè)棘手的問題,其實(shí)是個(gè)簡單的問題。$(this) 返回一個(gè) jQuery 對象,你可以對它調(diào)用多個(gè) jQuery 方法,比如用 text() 獲取文本,用val() 獲取值等等。而 this 代表當(dāng)前元素,它是 JavaScript 關(guān)鍵詞中的一個(gè),表示上下文中的當(dāng)前 DOM 元素。你不能對它調(diào)用 jQuery 方法,直到它被 $() 函數(shù)包裹,例如 $(this)。
attr() 方法被用來提取任意一個(gè)HTML元素的一個(gè)屬性的值. 你首先需要利用jQuery選擇及選取到所有的鏈接或者一個(gè)特定的鏈接,然后你可以應(yīng)用attr()方法來獲得他們的href屬性的值。下面的代碼會找到頁面中所有的鏈接并返回href值:
前面這個(gè)問題之后額外的一個(gè)后續(xù)問題是,attr()方法和jQuery中的其它方法一樣,能力不止一樣. 如果你在調(diào)用attr()的同時(shí)帶上一個(gè)值 例如. attr(name, value), 這里name是屬性的名稱,value是屬性的新值。
盡管 detach() 和 remove() 方法都被用來移除一個(gè)DOM元素, 兩者之間的主要不同在于 detach() 會保持對過去被解除元素的跟蹤, 因此它可以被取消解除, 而 remove() 方法則會保持過去被移除對象的引用. 你也還可以看看 用來向DOM中添加元素的 appendTo() 方法.
通過利用 addClass() 和 removeClass() 這兩個(gè) jQuery 方法。動(dòng)態(tài)的改變元素的class屬性可以很簡單例如. 使用類“.active"來標(biāo)記它們的未激活和激活狀態(tài),等等.
這是一個(gè)稍微高級點(diǎn)兒的jQuery問題。好吧,除了報(bào)錯(cuò)節(jié)省服務(wù)器帶寬以及更快的下載速度這許多的好處之外, 重要的是,如果瀏覽器已經(jīng)從同一個(gè)CDN下載類相同的 jQuery 版本, 那么它就不會再去下載它一次. 因此今時(shí)今日,許多公共的網(wǎng)站都將jQuery用于用戶交互和動(dòng)畫, 如果瀏覽器已經(jīng)有了下載好的jQuery庫,網(wǎng)站就能有非常好的展示機(jī)會。
ajax() 方法更強(qiáng)大,更具可配置性, 讓你可以指定等待多久,以及如何處理錯(cuò)誤。get() 方法是一個(gè)只獲取一些數(shù)據(jù)的專門化方法。
方法鏈?zhǔn)菍σ粋€(gè)方法返回的結(jié)果調(diào)用另一個(gè)方法,這使得代碼簡潔明了,同時(shí)由于只對 DOM 進(jìn)行了一輪查找,性能方面更加出色。
這通常用于阻止事件向上冒泡。
第一種,因?yàn)樗苯诱{(diào)用了 JavaScript 引擎。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/javaee
北京校區(qū)