1. 程式人生 > >getHref:獲取A連結指向(面試題)

getHref:獲取A連結指向(面試題)

英語專八轉前端,在家學習ing。
說說今天面試吧,後臺人面,不懂前端。沒被錄取。
我說說面試題吧;
改寫以下程式碼:

for(var i=0;i<document.getElementsByTagName("a").length;i++){
    document.getElementsByTagName("a")[i].onclick=function(){
        console.log(this.href)
    }
}

這道題考效能,先吐槽一下點選連結會跳轉頁面吧,就假定單純考試效能;我大腦想的是:用判斷代替迴圈;給父級繫結;

window.onload = function
() {
parent.onclick = function (e) { e.preventDefault(); var target = e.target; if (target.nodeName.toLowerCase() == "a") { console.log(target.href) } } }

但是如果不知道父元素呢?繫結給父元素的父元素,乾脆繫結給document,請看以下程式碼;

    window.onload = function () {
        document.onclick = function (e) {
            e.preventDefault();
            var target = e.target;
            if (target.nodeName.toLowerCase() == "a") {
                console.log(target.href)
            }
        }
    }

但是其實上一節說過了,用函式包裹起來一個變數doc=document;這樣每次呼叫函式時會自動獲取當前的document,而且使用完後會銷燬。
其實這樣的假設很沒有意義,尤其是一個後臺程式設計師在看著所謂標準答案時:

for(var i=0,as=document.getElementsByTagName("a");i<as.length;i++){
    as[i].onclick=function(){
        console.log(this.href)
    }
}

相關推薦

getHref獲取A連結指向(試題

英語專八轉前端,在家學習ing。 說說今天面試吧,後臺人面,不懂前端。沒被錄取。 我說說面試題吧; 改寫以下程式碼: for(var i=0;i<document.getElementsByTagName("a").length;i++){

JS引用類型 --- 函數(含this指向試題

body 輸出 pos 返回 {} 回調 2個 重復 .... 一、函數基礎 1. 函數:可重用的代碼塊 2. 函數可以作為參數、返回值使用 3. 函數實際上是 Function 的實例,其數據類型是Object 4. 但typeof Function 值為 functio

連結串列試題返回倒數第k個節點

題目來源:劍指offer 方法一: 首先我們先得出連結串列一共有多少個節點標記為count個,然後正數第count-k+1個就是倒數第k個節點,迴圈得到就可以。 程式碼: class Solution { public: ListNode*

Python3.x獲取登錄界校驗碼圖片

urn and code 實例 return align ace get pan Python3.x:獲取登錄界面校驗碼圖片 實例代碼: # python3 # author lizm # datetime 2018-06-01 18:00:00 # -*- coding

連結串列試題集合

  連結串列面試題: 1. 比較順序表和連結串列的優缺點,說說它們分別在什麼場景下使用? 順序表一般用於查詢,可隨機訪問; 連結串列一般用於增刪改,不可隨機訪問; 如果資料元素不多,兩種方式沒有太大的差別 如果資料元素不定,建議使用連結串列 順序表

day 12、13、14 summary、homework、試題

一、summary 總結 迭代器: 可迭代協議 —— 含有iter方法的都是可迭代的 迭代器協議 —— 含有next和iter的都是迭代器 特點 1、節省記憶體空間 2、方便逐個取值,一個迭代器只能取一次。 生成器 —— 迭代器 生

連結串列試題C++

注意頭結點的處理,如果倒敘記得將新的尾節點指向空。 示例一 給定一個整數num,如何在節點值有序的連結串列中插入一個節點值為num的節點,並且保證這個單鏈表依然有序。 #include<iostream> #include<thread> using

單鏈表的基本操作及連結串列試題

單鏈表的基本操作及連結串列面試題 程式程式碼如下: LinkList.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include <stdio.h> #include <stdlib.

連結串列試題----約瑟夫環相關

約瑟夫環相關連結串列面試題 繼上篇部落格之------------ 什麼是約瑟夫環 約瑟夫環 判斷是否成環 求環的長度 環的入口點

一文搞定連結串列試題系列之二 —— Leetcode234. Palindrome Linked List迴文連結串列\

連結串列薈萃二: 迴文連結串列 列表解法 迴文連結串列 題目:迴文連結串列給定一個連結串列,判斷該連結串列是否是迴文連結串列,要求O(n)時間複雜度,O(1)空間複雜度。 Given a singly linked

海量資料處理十道試題與十個海量資料處理方法總結(大資料演算法試題

第一部分、十道海量資料處理面試題 1、海量日誌資料,提取出某日訪問百度次數最多的那個IP。       首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大檔案中。注意到IP是32位的,最多有個2^32個IP。同樣可以採用對映的方法

連結串列-------常見題型(試題

1.從尾頭到列印單鏈表 void PrintReverse(ListNode *first) { ListNode *end = NULL; while (end != first) { ListNode *cur = first; //找到要列印的

連結串列試題

關於連結串列已經學了有一段時間了,今天抽空進行了整理,列出來常見的有關連結串列的面試題,以下想法如有瑕疵望批評指出,希望能給初學者帶來一點參考和價值 從尾到頭列印單鏈表 遞迴列印 // 1、從尾到頭列印單鏈表 遞迴 void ListReversePrint(ListN

複雜連結串列拷貝(試題

這是《Google等公司資料結構+演算法面試》上的一道題,原題如下: 下圖是一個含有5個結點的該型別複雜連結串列。 圖中實線箭頭表示m_pNext指標,虛線箭頭表示m_pSibling指標。為簡單起見, 指向NULL的指標沒有畫出。                  

連結串列試題】【進階】

1、查詢倒數第 k 個連結串列 題目描述:給定一個單向連結串列 List ,要你設計演算法找出倒數第 K 個結點並列印 struct ListNode { DataType m_Value; ListNode* m_pNext; }; ListNode* FindKt

【資料結構】連結串列試題升級版

1、複雜連結串列的複製 複雜連結串列 一個連結串列的每個結點,有一個next指標指向下一個結點,還有一個random指標指向這個連結串列中的隨機一個結點或者NULL。 現在要求複製這個連結串列,並返回複製後的新連結串列。 思路如下: 複雜連結串列的資料型別: typedef str

【資料結構】連結串列試題

1、倒序列印連結串列 (1)非遞迴方式 程式碼如下: void ReversePrint(ListNode **pFirst) { ListNode *last = NULL; ListNode *cur = NULL; assert(*pFirst != NULL); w

連結串列試題程式碼總結(java

這是原文連結:http://www.jianshu.com/p/a64d1ef95980 最近總結了一下資料結構和演算法的題目,這是第二篇文章,關於連結串列的,第一篇文章關於二叉樹的參見 廢話少說,上鍊表的資料結構 class ListNode { ListNode ne

連結串列試題】合併兩個有序連結串列, 合併後依然有序

程式碼 // 合併兩個有序連結串列 SListNode * MergeOrderedList(SListNode *p1First, SListNode *p2First) { SListNode*

連結串列試題之合併兩個有序連結串列

關於合併兩個有序的連結串列,假定該連結串列為升序排列,排列後的新表依舊升序。以下提供兩種方法進行排列。 建立新節點為空,依次後續插入法 Node* MergeTwoList1(N