JS+JQuery

JQuery

1. jQuery 庫中的 $() 是什么?

$()函數(shù)是 jQuery() 函數(shù)的別稱,乍一看這很怪異,還使 jQuery 代碼晦澀難懂躬它。一旦你適應(yīng)了,你會愛上它的簡潔东涡。$() 函數(shù)用于將任何對象包裹成 jQuery 對象冯吓,接著你就被允許調(diào)用定義在 jQuery 對象上的多個不同方法。你甚至可以將一個選擇器字符串傳入 $() 函數(shù)疮跑,它會返回一個包含所有匹配的 DOM 元素?cái)?shù)組的 jQuery 對象组贺。

2. 網(wǎng)頁上有 5 個 <div> 元素,如何使用 jQuery來選擇它們祖娘?

另一個重要的 jQuery 問題是基于選擇器的失尖。jQuery 支持不同類型的選擇器,例如 ID 選擇器渐苏、class 選擇器掀潮、標(biāo)簽選擇器。鑒于這個問題沒提到 ID 和 class琼富,你可以用標(biāo)簽選擇器來選擇所有的 div 元素仪吧。jQuery 代碼:$("div"),這樣會返回一個包含所有 5 個 div 標(biāo)簽的 jQuery 對象鞠眉。

3. jQuery 里的 ID 選擇器和 class 選擇器有何不同薯鼠?

如果你用過 CSS择诈,你也許就知道 ID 選擇器和 class 選擇器之間的差異,jQuery 也同樣如此出皇。

ID 選擇器使用 ID 來選擇元素羞芍,比如 #element1,
class 選擇器使用 CSS class 來選擇元素恶迈。
當(dāng)你只需要選擇一個元素時涩金,使用 ID 選擇器谱醇,而如果你想要選擇一組具有相同 CSS class 的元素暇仲,就要用 class 選擇器。
在面試過程中副渴,你有很大幾率會被要求使用 ID 選擇器和 class 選擇器來寫代碼奈附。下面的 jQuery 代碼使用了 ID 選擇器和 class 選擇器:

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

正如你所見,從語法角度來說煮剧,ID 選擇器和 class 選擇器的另一個不同之處是斥滤,前者用字符”#”而后者用字符”.”

4. 如何在點(diǎn)擊一個按鈕時使用 jQuery 隱藏一個圖片勉盅?

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

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

我喜歡這個問題,因?yàn)楹苜N近實(shí)際使用宰闰,代碼也不復(fù)雜茬贵。

5. $(document).ready() 是個什么函數(shù)?

為什么要用它移袍?
這個問題很重要解藻,并且常常被問到。
ready() 函數(shù)用于在文檔進(jìn)入ready狀態(tài)時執(zhí)行代碼葡盗。當(dāng)DOM 完全加載(例如HTML被完全解析DOM樹構(gòu)建完成時)螟左,jQuery允許你執(zhí)行代碼。使用$(document).ready()的最大好處在于它適用于所有瀏覽器觅够,jQuery幫你解決了跨瀏覽器的難題路狮。

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

這個問答是緊接著上一個的蔚约。
JavaScript window.onload 事件jQuery ready 函數(shù)之間的主要區(qū)別是:

  • 前者除了要等待 DOM 被創(chuàng)建還要等到包括大型圖片奄妨、音頻、視頻在內(nèi)的所有外部資源都完全加載苹祟。
    如果加載圖片和媒體內(nèi)容花費(fèi)了大量時間砸抛,用戶就會感受到定義在 window.onload 事件上的代碼在執(zhí)行時有明顯的延遲评雌。
  • 另一方面,jQuery ready() 函數(shù)只需對 DOM 樹的等待直焙,而無需對圖像或外部資源加載的等待景东,從而執(zhí)行起來更快。使用 jQuery $(document).ready() 的另一個優(yōu)勢是你可以在網(wǎng)頁里多次使用它奔誓,瀏覽器會按它們在 HTML 頁面里出現(xiàn)的順序執(zhí)行它們斤吐,相反對于 onload 技術(shù)而言,只能在單一函數(shù)里使用厨喂。
    鑒于這個好處和措,用 jQuery ready() 函數(shù)比用 JavaScript window.onload 事件要更好些。

7. 如何找到所有 HTML select 標(biāo)簽的選中項(xiàng)蜕煌?

這是面試?yán)锉容^棘手的 jQuery 問題之一派阱。
這是個基礎(chǔ)的問題,但是別期望每個 jQuery 初學(xué)者都知道它斜纪。
你能用下面的 jQuery 選擇器獲取所有具備 multiple=true 的 ?select ? 標(biāo)簽的選中項(xiàng):$('[name=NameOfSelectedTag] :selecte**d')這段代碼結(jié)合使用了屬性選擇器:selected選擇器贫母,結(jié)果只返回被選中的選項(xiàng)。你可按需修改它盒刚,比如用 id 屬性而不是 name 屬性來獲取 ?select? 標(biāo)簽腺劣。

8. jQuery 里的 each() 是什么函數(shù)?你是如何使用它的因块?

each() 函數(shù)就像是 Java 里的一個 Iterator橘原,它允許你遍歷一個元素集合。你可以傳一個函數(shù)給 each() 方法贮聂,被調(diào)用的 jQuery 對象會在其每個元素上執(zhí)行傳入的函數(shù)靠柑。有時這個問題會緊接著上面一個問題,舉個例子吓懈,如何在 alert 框里顯示所有選中項(xiàng)歼冰。我們可以用上面的選擇器代碼找出所有選中項(xiàng),然后我們在 alert 框中用 each() 方法來一個個打印它們耻警,代碼如下:

$('[name=NameOfSelectedTag] :selected').each(function(selected) {
    alert($(selected).text());
});   //其中 text() 方法返回選項(xiàng)的文本隔嫡。

9. 你是如何將一個 HTML 元素添加到 DOM 樹中的?

你可以用 jQuery 方法 appendTo() 將一個 HTML 元素添加到 DOM 樹中甘穿。這是 jQuery 提供的眾多操控 DOM 的方法中的一個腮恩。你可以通過 appendTo() 方法在指定的 DOM 元素末尾添加一個現(xiàn)存的元素或者一個新的 HTML 元素。

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

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

11. $(this) 和 this 關(guān)鍵字在 jQuery 中有何不同荡含?

這對于很多 jQuery 初學(xué)者來說是一個棘手的問題咒唆,其實(shí)是個簡單的問題。$(this) 返回一個 jQuery 對象释液,你可以對它調(diào)用多個 jQuery 方法全释,比如用 text() 獲取文本,用val() 獲取值等等误债。而 this 代表當(dāng)前元素浸船,它是 JavaScript 關(guān)鍵詞中的一個,表示上下文中的當(dāng)前 DOM 元素寝蹈。你不能對它調(diào)用 jQuery 方法李命,直到它被 $() 函數(shù)包裹,例如 $(this)躺盛。

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

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

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

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

前面這個問題之后額外的一個后續(xù)問題是槽惫,attr()方法和jQuery中的其它方法一樣,能力不止一樣. 如果你在調(diào)用attr()的同時帶上一個值 例如. attr(name, value), 這里name是屬性的名稱辩撑,value是屬性的新值界斜。

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

盡管 detach()remove() 方法都被用來移除一個DOM元素, 兩者之間的主要不同在于:

  • detach() 會保持對過去被解除元素的跟蹤, 因此它可以被取消解除 - remove() 方法則會保持過去被移除對象的引用. 你也還可以看看 用來向DOM中添加元素的 appendTo() 方法.

15. 你如何利用jQuery來向一個元素中添加和移除CSS類?

通過利用 addClass()removeClass() 這兩個 jQuery 方法。動態(tài)的改變元素的class屬性可以很簡單例如.
使用類“.active"來標(biāo)記它們的未激活和激活狀態(tài)合冀,

16. 使用 CDN 加載 jQuery 庫的主要優(yōu)勢是什么 ?

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

17. jQuery.get() 和 jQuery.ajax() 方法之間的區(qū)別是什么

  • ajax() 方法更強(qiáng)大林螃,更具可配置性, 讓你可以指定等待多久,以及如何處理錯誤俺泣。
  • get() 方法是一個只獲取一些數(shù)據(jù)的專門化方法疗认。

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

方法鏈?zhǔn)菍σ粋€方法返回的結(jié)果調(diào)用另一個方法伏钠,這使得代碼簡潔明了横漏,同時由于只對 DOM 進(jìn)行了一輪查找,性能方面更加出色

19. 你要是在一個 jQuery 事件處理程序里返回了

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

20. 哪種方式更高效:document.getElementById("myId"

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

JS

1.call 與 apply 區(qū)別

第二個參數(shù)的類型不同

解析:
call 和 apply 的作用赴肚,完全一樣素跺,唯一的區(qū)別就是在參數(shù)上面鹏秋。

  • call 接收的參數(shù)不固定,第一個參數(shù)是函數(shù)體內(nèi) this 的指向亡笑,第二個參數(shù)以下是依次傳入的參數(shù)侣夷。
  • apply 接收兩個參數(shù),第一個參數(shù)也是函數(shù)體內(nèi) this 的指向仑乌。第二個參數(shù)是一個集合對象(數(shù)組或者類數(shù)組)

2.正則表達(dá)式構(gòu)造函數(shù) var reg = new RegExp('xxx')與正則表達(dá)字面量 var reg = // 有什么不同百拓?

使用正則表達(dá)字面量的效率更高解析:下面的示例代碼演示了兩種可用于創(chuàng)建正則表達(dá)式以匹配反斜杠的方法:

//正則表達(dá)字面量
var re = /\\/gm;

//正則構(gòu)造函數(shù)
var reg = new RegExp("\\\\", "gm");

var foo = "abc\\123"; // foo的值為"abc\123"
console.log(re.test(foo)); //true
console.log(reg.test(foo)); //true

如上面的代碼中可以看到,使用正則表達(dá)式字面量表示法時式子顯得更加簡短晰甚,而且不用按照類似類(class-like)的構(gòu)造函數(shù)方式思考衙传。

  • 其次,在當(dāng)使用構(gòu)造函數(shù)的時候厕九,在這里要使用四個反斜杠才能匹配單個反斜杠蓖捶。這使得正則表達(dá)式模式顯得更長,更加難以閱讀和修改扁远。
  • 正確來說俊鱼,當(dāng)使用 RegExp()構(gòu)造函數(shù)的時候,不僅需要轉(zhuǎn)義引號(即"表示")畅买,并且通常還需要雙反斜杠(即\表示一個\)并闲。
  • 使用 new RegExp()的原因之一在于,某些場景中無法事先確定模式谷羞,而只能在運(yùn)行時以字符串方式創(chuàng)建帝火。

3.異步加載 js 的方法

方案一:?script?標(biāo)簽的 async="async"屬性

點(diǎn)評:HTML5 中新增的屬性,Chrome湃缎、FF犀填、IE9&IE9+均支持(IE6~8 不支持)。此外嗓违,這種方法不能保證腳本按順序執(zhí)行九巡。

方案二:?script?標(biāo)簽的 defer="defer"屬性

點(diǎn)評:兼容所有瀏覽器。此外靠瞎,這種方法可以確保所有設(shè)置 defer 屬性的腳本按順序執(zhí)行比庄。

方案三:動態(tài)創(chuàng)建?script?標(biāo)簽

示例:

?!DOCTYPE html?
?html?
  ?head?
    ?script type="text/javascript"?
      (function() {
        var s = document.createElement_x("script");
        s.type = "text/javascript";
        s.src = "http://code.jquery.com/jquery-1.7.2.min.js";
        var tmp = document.getElementsByTagName_r("script")[0];
        tmp.parentNode.insertBefore(s, tmp);
      })();
    ?/script?
  ?/head?
  ?body?
    ?img src="http://xybtv.com/uploads/allimg/100601/48-100601162913.jpg" /?
  ?/body?
?/html?

點(diǎn)評:兼容所有瀏覽器。

方案四:AJAX eval(使用 AJAX 得到腳本內(nèi)容乏盐,然后通過 eval_r(xmlhttp.responseText)來運(yùn)行腳本)

點(diǎn)評:兼容所有瀏覽器佳窑。

方案五:iframe 方式(這里可以參照:iframe 異步加載技術(shù)及性能 中關(guān)于 Meboo 的部分)

點(diǎn)評:兼容所有瀏覽器。

4.去除數(shù)組重復(fù)成員的方法

方法 1 擴(kuò)展運(yùn)算符和 Set 結(jié)構(gòu)相結(jié)合父能,就可以去除數(shù)組的重復(fù)成員
// 去除數(shù)組的重復(fù)成員
[...new Set([1, 2, 2, 3, 4, 5, 5])];
// [1, 2, 3, 4, 5]
方法 2
function dedupe(array) {
  return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]); // [1, 2, 3]
方法 3(ES5)
function unique(arry) {
  const temp = [];
  arry.forEach(e =? {
    if (temp.indexOf(e) == -1) {
      temp.push(e);
    }
  });

  return temp;
}

5.去除字符串里面的重復(fù)字符

最簡單的方式[...new Set("ababbc")].join(""); // "abc"

6.求數(shù)組的最大值

Math.max.apply(null, 數(shù)組)var a = [1, 2, 3, 5];
alert(Math.max.apply(null, a)); //最大值
alert(Math.min.apply(null, a)); //最小值

7.原型的作用 以及什么是原型

作用:實(shí)現(xiàn)資源共享什么是原型:實(shí)例在被創(chuàng)建的那一刻神凑,構(gòu)造函數(shù)的 prototype 屬性的值。

8.說說你對作用域鏈的理解

  • 作用域鏈的作用是保證執(zhí)行環(huán)境里有權(quán)訪問的變量和函數(shù)是有序的,
  • 作用域鏈的變量只能向上訪問溉委,變量訪問到 window 對象即被終止鹃唯,
  • 作用域鏈向下訪問變量是不被允許的。

9.JavaScript 原型瓣喊,原型鏈 ? 有什么特點(diǎn)坡慌?

  • 原型對象也是普通的對象,是對象一個自帶隱式的proto屬性藻三,原型也有可能有自己的原型洪橘,如果一個原型對象的原型不為 null 的話,我們就稱之為原型鏈棵帽。
  • 原型鏈?zhǔn)怯梢恍┯脕砝^承和共享屬性的對象組成的(有限的)對象鏈熄求。
    JavaScript 的數(shù)據(jù)對象有那些屬性值?
 writable  //這個屬性的值是否可以改逗概。
 configurable    //這個屬性的配置是否可以刪除弟晚,修改。
enumerable    //這個屬性是否能在 for…in 循環(huán)中遍歷出來或在 Object.keys 中列舉出來逾苫。
 value    //屬性值卿城。
  • 當(dāng)我們需要一個屬性的時,Javascript 引擎會先看當(dāng)前對象中是否有這個屬性隶垮, 如果沒有的話藻雪,就會查找他的 Prototype 對象是否有這個屬性秘噪。
function clone(proto) {
  function Dummy() {}
  Dummy.prototype = proto;
  Dummy.prototype.constructor = Dummy;
  return new Dummy(); //等價(jià)于Object.create(Person);
}
function object(old) {
  function F() {}
  F.prototype = old;
  return new F();
}
var newObj = object(oldObject);

10.offsetWidth/offsetHeight,clientWidth/clientHeight 與 scrollWidth/scrollHeight 的區(qū)別

  • offsetWidth/offsetHeight返回值包含content + padding + border 狸吞,如果有滾動條,也不包含滾動條
  • clientWidth/clientHeight返回值只包含content + padding指煎,如果有滾動條蹋偏,也不包含滾動條
  • scrollWidth/scrollHeight返回值包含content + padding + 溢出內(nèi)容的尺寸
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市至壤,隨后出現(xiàn)的幾起案子威始,更是在濱河造成了極大的恐慌,老刑警劉巖像街,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黎棠,死亡現(xiàn)場離奇詭異,居然都是意外死亡镰绎,警方通過查閱死者的電腦和手機(jī)脓斩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畴栖,“玉大人随静,你說我怎么就攤上這事。” “怎么了燎猛?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵恋捆,是天一觀的道長。 經(jīng)常有香客問我重绷,道長沸停,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任昭卓,我火速辦了婚禮星立,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘葬凳。我一直安慰自己绰垂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布火焰。 她就那樣靜靜地躺著劲装,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昌简。 梳的紋絲不亂的頭發(fā)上占业,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音纯赎,去河邊找鬼谦疾。 笑死,一個胖子當(dāng)著我的面吹牛犬金,可吹牛的內(nèi)容都是我干的念恍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晚顷,長吁一口氣:“原來是場噩夢啊……” “哼戚丸!你這毒婦竟也來了遵倦?” 一聲冷哼從身側(cè)響起如失,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤地啰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后栓袖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匣摘,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年裹刮,在試婚紗的時候發(fā)現(xiàn)自己被綠了音榜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡必指,死狀恐怖囊咏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤梅割,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布霜第,位于F島的核電站,受9級特大地震影響户辞,放射性物質(zhì)發(fā)生泄漏泌类。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一底燎、第九天 我趴在偏房一處隱蔽的房頂上張望刃榨。 院中可真熱鬧,春花似錦双仍、人聲如沸枢希。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苞轿。三九已至,卻和暖如春逗物,著一層夾襖步出監(jiān)牢的瞬間搬卒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工翎卓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留契邀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓失暴,卻偏偏與公主長得像坯门,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锐帜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

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

  • 一田盈、樣式篇 第1章 初識jQuery (1)環(huán)境搭建 進(jìn)入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,386評論 0 44
  • 內(nèi)容回顧 JS開發(fā)步驟確定事件(onclick鼠標(biāo)點(diǎn)擊事件,onsubmit表單的提交事件缴阎,onload頁面加載完...
    chcvn閱讀 496評論 0 3
  • 因?yàn)閷?shí)習(xí)工作的需要痹升,要編寫部分前端的代碼建炫。因此花了兩天對于前端的基礎(chǔ)知識進(jìn)行了簡單的學(xué)習(xí)√鄱辏基本上對于項(xiàng)目中前端代碼...
    卻無法閱讀 1,118評論 0 6
  • 概要 64學(xué)時 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,208評論 0 3
  • ∵‘2020年3日3日 星期二 天氣 晴 今天是我外孫女劉硯黎在線上課的第一天 [ 停課肛跌,不停學(xué) ] 6:30準(zhǔn)時...
    1032d6579f31閱讀 367評論 1 1