最常見的 20 個(gè) jQuery 面試問(wèn)題及答案

原文:Top 20 jQuery Interview Questions and Answers for JavaScript Programmers
譯者:leoxu, 霍嘯林, Realfighter, AlexQ
地址:http://t.cn/RwFelyF

jQuery 面試問(wèn)答

毫無(wú)疑問(wèn),jQuery給了JavaScript急需的提振奉瘤,這是一門如此有用,但同時(shí)總是常常被低估的語(yǔ)言. 在 jQuery 粉墨登場(chǎng)之前,我們?cè)?jīng)會(huì)寫出冗長(zhǎng)的JavaScript代碼以现,不僅僅為更大型的應(yīng)用程序喧半,有時(shí)即使是更小的應(yīng)用程序也要如此. 那種代碼常常是既難以閱讀又難以維護(hù)的滋迈。

在使用這個(gè)優(yōu)秀的庫(kù)之前寫過(guò)原生的JavaScript,僅僅在用過(guò)它的一個(gè)月之后蠕蚜,我就能意識(shí)到j(luò)Query的真正力量. 鑒于它的巨大人氣,有關(guān)jQuery的面試問(wèn)題悔橄,以及有關(guān)HTML和JavaScript的數(shù)量在任何web開發(fā)者面試中有所增加. 因?yàn)?jQuery 相對(duì)較新靶累,大多數(shù)面試所涉及的問(wèn)題都是圍繞核心的 jQuery 庫(kù)的,包括選擇器, DOM 操作 以及 jQuery 基礎(chǔ)癣疟。

在本篇文章中挣柬,我要向 HTML 和 JavaScript 開發(fā)人員分享 20 個(gè)在不同面試遇到的 jQuery 問(wèn)題。這里面的一些問(wèn)題也許同樣會(huì)在那些要求同時(shí)進(jìn)行服務(wù)端(Spring睛挚,Servlet 和 JSP)和客戶端(HTML邪蛔,CSS,JavaScript 和 jQuery)的開發(fā) Java Web 開發(fā)面試中涉及扎狱。

如果你正要去面試一個(gè)職位侧到,它需要你擁有多項(xiàng)技能,比如:Java淤击、jQuery匠抗,它并不是希望你明白jQuery每一個(gè)細(xì)微的細(xì)節(jié),或?qū)ζ溆腥娴牧私馕厶В侨绻闶且嬖囈粋€(gè)真正的客戶端開發(fā)職位汞贸,你就需要積累更多高級(jí)的有技巧性的jQuery問(wèn)題,而不限于本文列舉的這些問(wèn)題印机。不過(guò)矢腻,你可以通過(guò)本文來(lái)快速的溫習(xí)那些jQuery面試中經(jīng)常被提到的問(wèn)題,而且它們大多也適用于有2到5年經(jīng)驗(yàn)的web開發(fā)人員射赛,特別是Java領(lǐng)域踏堡。

jQuery 面試問(wèn)題和答案

JavaScript 是客戶端腳本的標(biāo)準(zhǔn)語(yǔ)言,而 jQuery 使得編寫 JavaScript 更加簡(jiǎn)單咒劲。你可以只用寫幾行的 jQuery 代碼就能實(shí)現(xiàn)更多的東西顷蟆。它是最常被用到的 JavaScript 庫(kù)之一诫隅,并且現(xiàn)在已經(jīng)很少有不用 jQuery 而使用原生 JavaScript 的新項(xiàng)目了。這對(duì)于作為一個(gè) Java web 開發(fā)者的你而言意味著你會(huì)在一場(chǎng) Java web 開發(fā)面試中發(fā)現(xiàn)許多 jQuery 的面試問(wèn)題帐偎。

早些時(shí)候逐纬,絕大部分都是 HTTP, HTML, CSS 以及 JavaScript,但最近開始削樊,除了 JavaScript 基礎(chǔ)之外豁生,人們也希望知道你是否熟悉 jQuery。這16個(gè)jQuery的問(wèn)題是為 web 開發(fā)者準(zhǔn)備的漫贞,且也能夠非常方便你在參加一次電話或者視頻一輪的面試之前糾正一些關(guān)鍵的概念甸箱。如果你是 jQuery 新手,那么它也能夠幫助你更加好的理解基礎(chǔ)知識(shí)迅脐,并激勵(lì)你去發(fā)現(xiàn)更多東西芍殖。

1. jQuery 庫(kù)中的$()是什么?(答案如下)

$()函數(shù)是jQuery()函數(shù)的別稱谴蔑,乍一看這很怪異豌骏,還使 jQuery 代碼晦澀難懂。一旦你適應(yīng)了隐锭,你會(huì)愛上它的簡(jiǎn)潔窃躲。$()函數(shù)用于將任何對(duì)象包裹成 jQuery 對(duì)象,接著你就被允許調(diào)用定義在 jQuery 對(duì)象上的多個(gè)不同方法钦睡。你甚至可以將一個(gè)選擇器字符串傳入$()函數(shù)蒂窒,它會(huì)返回一個(gè)包含所有匹配的 DOM 元素?cái)?shù)組的 jQuery 對(duì)象。這個(gè)問(wèn)題我已經(jīng)見過(guò)好幾次被提及荞怒,盡管它非沉跣澹基礎(chǔ),它經(jīng)常被用來(lái)區(qū)分一個(gè)開發(fā)人員是否了解 jQuery挣输。

2. 網(wǎng)頁(yè)上有 5 個(gè)<div>元素纬凤,如何使用 jQuery來(lái)選擇它們?答案

另一個(gè)重要的 jQuery 問(wèn)題是基于選擇器的撩嚼。jQuery 支持不同類型的選擇器停士,例如 ID 選擇器、class 選擇器完丽、標(biāo)簽選擇器恋技。鑒于這個(gè)問(wèn)題沒提到 ID 和 class,你可以用標(biāo)簽選擇器來(lái)選擇所有的 div 元素逻族。jQuery 代碼:$("div")蜻底,這樣會(huì)返回一個(gè)包含所有 5 個(gè) div 標(biāo)簽的 jQuery 對(duì)象。更詳細(xì)的解答參見上面鏈接的文章聘鳞。

3. jQuery 里的 ID 選擇器和 class 選擇器有何不同薄辅?答案

如果你用過(guò) CSS要拂,你也許就知道 ID 選擇器和 class 選擇器之間的差異,jQuery 也同樣如此站楚。ID 選擇器使用 ID 來(lái)選擇元素脱惰,比如 #element1,而 class 選擇器使用 CSS class 來(lái)選擇元素窿春。當(dāng)你只需要選擇一個(gè)元素時(shí)拉一,使用 ID 選擇器,而如果你想要選擇一組具有相同 CSS class 的元素旧乞,就要用 class 選擇器蔚润。在面試過(guò)程中,你有很大幾率會(huì)被要求使用 ID 選擇器和 class 選擇器來(lái)寫代碼尺栖。下面的 jQuery 代碼使用了 ID 選擇器和 class 選擇器:

$('#LoginTextBox')  // Returns element wrapped as jQuery object with id='LoginTextBox'
$('.active') // Returns all elements with CSS class active.

正如你所見嫡纠,從語(yǔ)法角度來(lái)說(shuō),ID 選擇器和 class 選擇器的另一個(gè)不同之處是决瞳,前者用字符”#”而后者用字符”.”。更詳細(xì)的分析和討論參見上面的答案鏈接左权。

4. 如何在點(diǎn)擊一個(gè)按鈕時(shí)使用 jQuery 隱藏一個(gè)圖片皮胡?

這是一個(gè)事件處理問(wèn)題。jQuery為按鈕點(diǎn)擊之類的事件提供了很好的支持赏迟。你可以通過(guò)以下代碼去隱藏一個(gè)通過(guò)ID或class定位到的圖片屡贺。你需要知道如何為按鈕設(shè)置事件并執(zhí)行hide()方法,代碼如下所示:

$('#ButtonToClick').click(function(){
    $('#ImageToHide').hide();
});

我喜歡這個(gè)問(wèn)題锌杀,因?yàn)楹苜N近實(shí)際使用甩栈,代碼也不復(fù)雜。

5. $(document).ready() 是個(gè)什么函數(shù)糕再?為什么要用它量没?(answer)

這個(gè)問(wèn)題很重要,并且常常被問(wèn)到突想。 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ì)討論绑嘹。

6. JavaScript window.onload 事件和 jQuery ready 函數(shù)有何不同稽荧?(答案

這個(gè)問(wèn)答是緊接著上一個(gè)的。JavaScript window.onload 事件和 jQuery ready 函數(shù)之間的主要區(qū)別是工腋,前者除了要等待 DOM 被創(chuàng)建還要等到包括大型圖片姨丈、音頻畅卓、視頻在內(nèi)的所有外部資源都完全加載。如果加載圖片和媒體內(nèi)容花費(fèi)了大量時(shí)間构挤,用戶就會(huì)感受到定義在 window.onload 事件上的代碼在執(zhí)行時(shí)有明顯的延遲髓介。

另一方面,jQuery ready()函數(shù)只需對(duì) DOM 樹的等待筋现,而無(wú)需對(duì)圖像或外部資源加載的等待唐础,從而執(zhí)行起來(lái)更快。使用jQuery $(document).ready()的另一個(gè)優(yōu)勢(shì)是你可以在網(wǎng)頁(yè)里多次使用它矾飞,瀏覽器會(huì)按它們?cè)?HTML 頁(yè)面里出現(xiàn)的順序執(zhí)行它們一膨,相反對(duì)于 onload 技術(shù)而言,只能在單一函數(shù)里使用洒沦。鑒于這個(gè)好處豹绪,用 jQuery ready()函數(shù)比用 JavaScript window.onload 事件要更好些。

7. 如何找到所有 HTML select 標(biāo)簽的選中項(xiàng)申眼?(答案如下)

這是面試?yán)锉容^棘手的 jQuery 問(wèn)題之一瞒津。這是個(gè)基礎(chǔ)的問(wèn)題,但是別期望每個(gè) jQuery 初學(xué)者都知道它括尸。你能用下面的 jQuery 選擇器獲取所有具備 multiple=true 的<select >標(biāo)簽的選中項(xiàng):

$('[name=NameOfSelectedTag] :selected')

這段代碼結(jié)合使用了屬性選擇器和:selected選擇器巷蚪,結(jié)果只返回被選中的選項(xiàng)。你可按需修改它濒翻,比如用id屬性而不是name屬性來(lái)獲取<select>標(biāo)簽屁柏。

8. jQuery 里的each()是什么函數(shù)?你是如何使用它的有送?(答案如下)

each()函數(shù)就像是 Java 里的一個(gè) Iterator淌喻,它允許你遍歷一個(gè)元素集合。你可以傳一個(gè)函數(shù)給each()方法雀摘,被調(diào)用的 jQuery 對(duì)象會(huì)在其每個(gè)元素上執(zhí)行傳入的函數(shù)裸删。有時(shí)這個(gè)問(wèn)題會(huì)緊接著上面一個(gè)問(wèn)題,舉個(gè)例子阵赠,如何在 alert 框里顯示所有選中項(xiàng)烁落。我們可以用上面的選擇器代碼找出所有選中項(xiàng),然后我們?cè)?alert 框中用each()方法來(lái)一個(gè)個(gè)打印它們豌注,代碼如下:

$('[name=NameOfSelectedTag] :selected').each(function(selected) {
    alert($(selected).text());
});

其中text()方法返回選項(xiàng)的文本伤塌。

9. 你是如何將一個(gè) HTML 元素添加到 DOM 樹中的?(答案如下)

你可以用 jQuery 方法appendTo()將一個(gè) HTML 元素添加到 DOM 樹中轧铁。這是 jQuery 提供的眾多操控 DOM 的方法中的一個(gè)每聪。你可以通過(guò)appendTo()方法在指定的 DOM 元素末尾添加一個(gè)現(xiàn)存的元素或者一個(gè)新的 HTML 元素。

10. 你能用 jQuery 代碼選擇所有在段落內(nèi)部的超鏈接嗎?(答案略)

這是另一個(gè)關(guān)于選擇器的 jQuery 面試題药薯。就像其他問(wèn)題那樣绑洛,只需一行 jQuery 代碼就能搞定。你可以使用下面這個(gè) jQuery 代碼片段來(lái)選擇所有嵌套在段落(<p>標(biāo)簽)內(nèi)部的超鏈接(<a>標(biāo)簽)……

11. $(this) 和 this 關(guān)鍵字在 jQuery 中有何不同童本?(答案如下)

這對(duì)于很多 jQuery 初學(xué)者來(lái)說(shuō)是一個(gè)棘手的問(wèn)題真屯,其實(shí)是個(gè)簡(jiǎn)單的問(wèn)題。$(this)返回一個(gè) jQuery 對(duì)象穷娱,你可以對(duì)它調(diào)用多個(gè) jQuery 方法绑蔫,比如用 text()獲取文本,用val() 獲取值等等泵额。而 this 代表當(dāng)前元素配深,它是 JavaScript 關(guān)鍵詞中的一個(gè),表示上下文中的當(dāng)前 DOM 元素嫁盲。你不能對(duì)它調(diào)用 jQuery 方法篓叶,直到它被$()函數(shù)包裹,例如$(this)羞秤。

12. 你如何使用jQuery來(lái)提取一個(gè)HTML 標(biāo)記的屬性 例如鏈接的href? (答案)

attr()方法被用來(lái)提取任意一個(gè)HTML元素的一個(gè)屬性的值. 你首先需要利用jQuery選擇及選取到所有的鏈接或者一個(gè)特定的鏈接缸托,然后你可以應(yīng)用attr()方法來(lái)獲得他們的href屬性的值。下面的代碼會(huì)找到頁(yè)面中所有的鏈接瘾蛋,并返回href值:

$('a').each(function(){
   alert($(this).attr('href'));
});

13. 你如何使用jQuery設(shè)置一個(gè)屬性值? (答案)

前面這個(gè)問(wèn)題之后額外的一個(gè)后續(xù)問(wèn)題是俐镐,attr()方法和jQuery中的其它方法一樣,能力不止一樣. 如果你在調(diào)用attr()的同時(shí)帶上一個(gè)值 例如. attr(name, value), 這里name是屬性的名稱瘦黑,value是屬性的新值京革。

14. jQuery中detach()remove()方法的區(qū)別是什么? (答案)

盡管detach()remove()方法都被用來(lái)移除一個(gè)DOM元素, 兩者之間的主要不同在于detach()會(huì)保持對(duì)過(guò)去被解除元素的跟蹤, 因此它可以被取消解除, 而 remove()方法則會(huì)保持過(guò)去被移除對(duì)象的引用. 你也還可以看看 用來(lái)向DOM中添加元素的appendTo()方法奇唤。

15. 你如何利用jQuery來(lái)向一個(gè)元素中添加和移除CSS類? (答案)

通過(guò)利用addClass()removeClass()這兩個(gè) jQuery 方法幸斥。動(dòng)態(tài)的改變?cè)氐?code>class屬性可以很簡(jiǎn)單。例如使用類“.active"來(lái)標(biāo)記它們的未激活和激活狀態(tài)咬扇,等等甲葬。

16. 使用 CDN 加載 jQuery 庫(kù)的主要優(yōu)勢(shì)是什么 ? (答案)

這是一個(gè)稍微高級(jí)點(diǎn)兒的jQuery問(wèn)題。好吧懈贺,除了報(bào)錯(cuò)節(jié)省服務(wù)器帶寬以及更快的下載速度這許多的好處之外, 最重要的是经窖,如果瀏覽器已經(jīng)從同一個(gè)CDN下載類相同的 jQuery 版本, 那么它就不會(huì)再去下載它一次. 因此今時(shí)今日,許多公共的網(wǎng)站都將jQuery用于用戶交互和動(dòng)畫, 如果瀏覽器已經(jīng)有了下載好的jQuery庫(kù)梭灿,網(wǎng)站就能有非常好的展示機(jī)會(huì)画侣。

17. jQuery.get()jQuery.ajax()方法之間的區(qū)別是什么?
ajax()方法更強(qiáng)大,更具可配置性, 讓你可以指定等待多久堡妒,以及如何處理錯(cuò)誤配乱。get()方法是一個(gè)只獲取一些數(shù)據(jù)的專門化方法。

18. jQuery 中的方法鏈?zhǔn)鞘裁矗渴褂梅椒ㄦ溣惺裁春锰帲?/strong>

方法鏈?zhǔn)菍?duì)一個(gè)方法返回的結(jié)果調(diào)用另一個(gè)方法搬泥,這使得代碼簡(jiǎn)潔明了桑寨,同時(shí)由于只對(duì) DOM 進(jìn)行了一輪查找,性能方面更加出色忿檩。

19. 你要是在一個(gè) jQuery 事件處理程序里返回了 false 會(huì)怎樣尉尾?

這通常用于阻止事件向上冒泡。

20. 哪種方式更高效:document.getElementbyId("myId") 還是 $("#myId")燥透?

第一種沙咏,因?yàn)樗苯诱{(diào)用了 JavaScript 引擎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兽掰,一起剝皮案震驚了整個(gè)濱河市芭碍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孽尽,老刑警劉巖窖壕,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異杉女,居然都是意外死亡瞻讽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門熏挎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)速勇,“玉大人,你說(shuō)我怎么就攤上這事坎拐》炒牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵哼勇,是天一觀的道長(zhǎng)都伪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)积担,這世上最難降的妖魔是什么陨晶? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮帝璧,結(jié)果婚禮上先誉,老公的妹妹穿的比我還像新娘。我一直安慰自己的烁,他們只是感情好褐耳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渴庆,像睡著了一般铃芦。 火紅的嫁衣襯著肌膚如雪买雾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天杨帽,我揣著相機(jī)與錄音漓穿,去河邊找鬼。 笑死注盈,一個(gè)胖子當(dāng)著我的面吹牛晃危,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播老客,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼僚饭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了胧砰?” 一聲冷哼從身側(cè)響起鳍鸵,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尉间,沒想到半個(gè)月后偿乖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哲嘲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年贪薪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眠副。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡画切,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出囱怕,到底是詐尸還是另有隱情霍弹,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布娃弓,位于F島的核電站典格,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忘闻。R本人自食惡果不足惜钝计,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一恋博、第九天 我趴在偏房一處隱蔽的房頂上張望齐佳。 院中可真熱鬧,春花似錦债沮、人聲如沸炼吴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)硅蹦。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間童芹,已是汗流浹背涮瞻。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留假褪,地道東北人署咽。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像生音,于是被迫代替她去往敵國(guó)和親宁否。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容