JavaScript 知识点 - Web API

DOM

便于描述树形结构的文档对象的模型,使浏览器可识别、JS可操作。

DOM属性操作

获取DOM节点:

var div1 = document.getElementById("div1")
var divList = document.getelementsByTagName("div")
var containerList = document.getElementsByClassName(".container")

property:JS对象属性(获取/修改)

var pList = document.querySelectorAll('p')
var p = pList[0]
p.style.width
p.className
p.nodeName

attribute:HTML标签属性(获取/修改)

var pList = document.querySelectorAll('p')
var p = pList[0]
p.getAttribute("data-name")
p.setAttribute("data-name", "ywh")
p.getAttribute("style")

DOM结构操作

// 新增节点
var div1 = document.getElementById("div1")
var p1 = document.createElement("p")
p1.innerHTML = "p1"
div1.appendChild(p1)
var p2 = document.getElementById("p2")
div1.appendChild(p2)

// 获取父子元素
var div1 = document.getElementById("div1")
var parent = div1.parentElement
var child = div1.childNodes
div1.removeChild(child[0])

BOM

浏览器对象模型

  • navigator
  • screen
  • location
  • history
navigator.userAgent

screen.width
screen.height

location.href
location.protocol
location.pathname
location.search
location.hash

history.back()
history.forward()

事件

通用事件绑定

var btn = document.getElementById("btn1")
btn.addEventListener("click", function(event) {
    console.log("clicked")
})

function bindEvent(elem, type, fn) {
    elem.addEventListener(type, fn)
}

var a = document.getElementById("link1")
bindEvent(a, "click", function(e) {
    e.prevntDefault()
    alert("clicked")
})

事件冒泡

节点事件触发时,如果其父节点都绑定相同的事件,则事件会从节点依次向外传递。

<body>
<div id="div1">
    <p id="p1">激活</p>
    <p id="p2">取消</p>
</div>
<script>
    function bindEvent(elem, type, fn) {
        elem.addEventListener(type, fn)
    }

    var p1 = document.getElementById("p1")
    var body = document.body

    bindEvent(p1, "click", function(e) {
        e.stopPropagation()     // 阻止点击p1时点击事件传递到body而产生alert("取消")
        alert("激活")
    })
    bindEvent(body, "click", function(e) {
        alert("取消")
    })
</script>
</body>

代理:在父节点绑定事件(并加入对子节点的判断),而不需要对每个子节点都绑定事件(且支持动态增删)

  • 代码简洁
  • 减少浏览器内存占用

使用代理完善通用绑定事件函数:

<div id="div1">
    <a id="a1">a1</a>
    <a id="a2">a2</a>
    <a id="a3">a3</a>
    <a id="a4">a4</a>
</div>
<script>
    function bindEvent(elem, type, selector, fn) {

        if (fn === undefined) {
            fn = selector
            selector = null
        }

        elem.addEventListener(type, function (e) {
            if (selector && e.target && e.target.matches(selector))
                fn.call(e.target, e)
            else
                fn(e)
        })
    }

    // 使用代理
    var div1 = document.getElementById("div1")
    bindEvent(div1, "click", "a", function (e) {
        console.log(this.innerHTML)
    })

    // 不使用代理
    var a = document.getElementById("a1")
    bindEvent(div1, "click", function (e) {
        console.log(a.innerHTML)
    })
</script>

详见《DOM基础总结》

兼容性问题

  • IE低版本使用attachEvent绑定事件,和W3C标准不一样;
  • IE低版本使用量非常少,很多网站早已不支持(忽略);

HTTP请求

XMLHttpRequest

readyState:

  • 0 未初始化:还没有调用send()方法;
  • 1 载入:已经调用send()方法,正在发送请求;
  • 2 载入完成:send()方法执行完成,已经接受到全部响应内容;
  • 3 交互:正在解析响应内容;
  • 4 完成:响应内容解析完成,可以在客户端调用。

status:

  • 2xx:成功处理成球
  • 3xx:需要重定向,浏览器直接跳转
  • 4xx:客户端错误
  • 5xx:服务端错误
let xhr = new XMLHttpRequest()
xhr.open("GET", "/api", false)
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {   
        if (xhr.status === 200) {
            alert(xhr.responseText)
        }
    }
}
xhr.send(null)

兼容性问题

  • IE低版本使用ActiveXObject,和W3C标准不一样。

跨域

见《跨域问题及解决方法》

存储

Cookie

  • 本身用于客户端和服务端之间通信;
  • 具有本地存储功能,document.cookie可以修改/获取;
  • 存储量小(4KB);
  • 所有HTTP请求都会带上,影响获取资源的效率。

LocalStorage和SessionStorage

  • HTML5专门为存储设计,存储量大(5M);
  • API简单易用,LocalStorage.setItem(key, value)LocalStorage.getItem(key)
  • SessionStorage在关闭浏览器时会自动清理,LocalStorage则会一直保留。

回答以下问题

  1. DOM是哪种基本的数据结构?
  2. DOM操作的常用API有哪些?
  3. DOM节点的attr和property有何区别?
  4. 如何检测浏览器类型?
  5. 拆解url各部分。
  6. 编写一个通用的事件监听函数。
  7. 描述事件冒泡流程。
  8. 对于一个无限下拉加载图片的页面,如何给每个图片绑定事件?
  9. 手动编写一个ajax,不依赖第三方库。
  10. 跨域的几种实现方式。
  11. Cookie,SessionStorage,LocalStorage的区别。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,421评论 1 45
  • 【转载】CSDN - 张林blog http://blog.csdn.net/XIAOZHUXMEN/articl...
    竿牍阅读 3,479评论 1 14
  • 1.一些开放性题目 1.自我介绍:除了基本个人信息以外,面试官更想听的是你与众不同的地方和你的优势。 2.项目介绍...
    55lover阅读 632评论 0 6
  • 前端开发知识点 HTML&CSS对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型...
    Hebborn_hb阅读 843评论 0 1
  • $HTML, HTTP,web综合问题 1、前端需要注意哪些SEO 2、 的title和alt有什么区别 3、HT...
    Hebborn_hb阅读 4,573评论 0 20