JS-WEB-API 整理

JS-WEB-API

常说的JS(浏览器执行的JS)包含两部分:

  • JS基础知识:ECMA 262标准
  • JS-WEB-API:W3C标准

W3C标准中关于JS的规定有:

  • DOM操作
  • BOM操作
  • 事件绑定
  • Ajax请求(包括HTTP协议)
  • 存储

例如:页面弹窗是 window.alert(123),浏览器需要做:

  1. 定义一个 window 全局变量,对象类型
  2. 给它定义一个 alert 属性,属性值是一个函数

获取元素 document.geiElementById(id),浏览器需要:

  1. 定义一个 document 全局变量,对象类型
  2. 给它定义一个 geiElementById 属性,属性值是一个函数

Document Object Model (DOM)

  • DOM是哪种基本的数据解构? 树形结构的文档对象模型
  • DOM操作常用API有哪些?
  • DOM 节点的attr 和 propery 有何区别?

DOM节点操作

1、获取

var a = document.getElementById("div1");
var b = document.getElementsByTagName(‘div‘);
var c = document.getElementsByClassName(‘.container‘);
var d = document.querySelectorAll(‘p‘);

2、property

修改的是JS对象的标准属性

3、attribute

修改获取的是HTML文档中标签的属性

DOM结构操作

新增节点,添加节点

var div1 = document.getElementById(‘div1‘);
//添加新节点
var p1 = document.createElement("p");
p1.innerHTML = ‘this is 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操作(Browser Object Model)

  • 检测浏览器类型
  • 拆解 url 各部分

知识点

  • navigator & screen
  • //检测浏览器类型var ua = navigator.userAgent;
    var isChrome = ua.indexOf(‘Chrome‘);
    console.log(isChrome);
    
    //screen  获取屏幕大小
    console.log(screen.width);
    console.log(screen.height);

    loaction & history

  • //拆解URL各部分//loaction
    console.log(location.href);        //当前域名console.log(location.host);        //当前域名console.log(location.protocol);    //协议 http:
    console.log(location.pathname); //当前分目录名
    console.log(location.search);    //    查询部分:‘?’之后部分
    console.log(location.hash);    //‘#’ 后面的字符
    
    //history
    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.preventDefault();
    alert(‘clicked‘);
})

IE低版本使用 attachEvent 绑定事件,和 w3c 标准不一样

事件冒泡

按照DOM树形结构,由子级到祖级的顺序传播

案例:点击p1弹出激活,点击其他的弹出取消

<div id="div1">
    <p id="p1">激活</p>
    <p id="p2">取消</p>
    <p id="p3">取消</p>
    <p id="p4">取消</p>
</div>
<div id="div2">
    <p id="p5">取消</p>
    <p id="p6">取消</p>
</div>

<script type="text/javascript">
    var p1 = document.getElementById(‘p1‘);
    var body = document.body;
    function bindEvent(elem,type,fn){
        elem.addEventListener(type,fn);
    }

    bindEvent(p1,‘click‘,function(e){
        e.stopPropagation();
        alert(‘激活‘);
    })
    bindEvent(body,‘click‘,function(){
        alert(‘取消‘);
    })

事件代理

事件代理就是在祖级DOM元素绑定一个事件,当触发子孙级DOM元素的事件时,利用事件流的原理来触发绑定在祖级DOM的事件。

<div id="div1">
    <a href="#">a1</a>
    <a href="#">a2</a>
    <a href="#">a3</a>
    <a href="#">a4</a>
    <!-- 会随时新增更多的 a 标签 -->
</div>

<script type="text/javascript">
    var div1 = document.getElementById(‘div1‘);
    div1.addEventListener(‘click‘,function(e){
        //target属性返回触发该事件的节点
        var target = e.target;
        //nodeName返回的标签名都是大写
        if(target.nodeName == ‘A‘){
            alert(target.innerHTML);
        }
    })
</script>

完善通用绑定事件函数

function bindEvent(elem,type,selector,fn){
    if(fn == null){
        fn = selector;
        selector = null;
    }
    elem.addEventListener(type,function(e){
        var target;    //使用代理
        if (selector){
            target = e.target;      //如果target是指定的选择器
            if(target.matches(selector)){        //让target使用fn的方法,修改this的指向
                fn.call(target,e);
            }    //不使用代理
        }else{
            fn(e);
        }
    })
}

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

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

代理的好处

  • 代码简洁
  • 减少浏览器内存占用(因为绑一次事件浏览器会计一次)

原文地址:https://www.cnblogs.com/anqwjoe/p/8993614.html

时间: 2024-11-04 20:24:58

JS-WEB-API 整理的相关文章

JS Web API 拖拽对话框案例

<style> .login-header { width: 100%; text-align: right; height: 30px; font-size: 24px; line-height: 30px; margin-left: -100px; } ul, li, ol, dl, dt, dd, div, p, span, h1, h2, h3, h4, h5, h6, a { padding: 0px; margin: 0px; } .login { width: 512px; po

使用RAP2和Mock.JS实现Web API接口的数据模拟和测试

最近一直在思考如何对Web API的其接口数据进行独立开发的问题,随着Web API的越来越广泛应用,很多开发也要求前端后端分离,例如统一的Web API接口后,Winform团队.Web前端团队.微信小程序或者APP团队大家可以同步开发,在最初约定一些接口的输入JSON数据和输出JSON数据,但是随着项目的进度开展,这些数据结构一直有所变化,那么我们模拟的JSON数据格式也需要协同变化,但是很不幸既然大家忙着开发,接口协调的事情肯定优先级没那么高,即使每次记得协调接口数据,也不一定能够完全一致

通过Knockout.js + ASP.NET Web API构建一个简单的CRUD应用

REFERENCE FROM : http://www.cnblogs.com/artech/archive/2012/07/04/Knockout-web-api.html 较之面向最终消费者的网站,企业级Web应用对用户体验的要求要低一些.不过客户对“用户体验”的要求是“与日俱增”的,很多被“惯坏了”的用户已经不能忍受Postback带来的页面刷新,所以Ajax在企业级Web应用中得到了广泛的应用.企业级Web应用的一个特点是以“数据处理”为主,所以“面向绑定”的Knockout.js 是一

通过Web Api 和 Angular.js 构建单页面的web 程序

在传统的web 应用程序中,浏览器端通过向服务器端发送请求,然后服务器端根据这个请求发送HTML到浏览器,这个响应将会影响整个的页面,比如说:用户通过一个连接导航到一个页面,会发送一个请求到服务器端,接下来服务器将会发送一个新的页面给浏览器. 但是在单页面应用程序中,整个页面只是在浏览器一开始请求的时候才会加载,接下来的请求,下来的交互请求都是通过ajax 来完成的,这就意味着只有部分的页面会更新,并不需要去加载整个的页面,这就减少了对用户操作的响应时间,从而使用户有一个更流畅的体验.但是在传统

【Web API系列教材】1.3 — 实战:用ASP.NET Web API和Angular.js创建单页面应用程序(下)

练习2:创建SPA界面 在本练习中,你将首先创建Geek Quiz的web前端,使用AngularJS专注于单页面应用程序的交互.然后你将使用CSS3来执行丰富的动画和提供一个当从一个问题转换到另一个问题时切换上下文的可视化效果以加强用户体验. 任务1:使用AngularJS来创建SPA界面 在本任务中,你将使用AngularJS来实现Geek Quiz应用程序的客户端.AngularJS是一个开源的JavaScript框架,它能够搭配MVC以加强基于浏览器的应用程序,使其对于开发和测试都更加便

【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI

注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. Part 5: Creating a Dynamic UI with Knockout.js 第5部分:用Knockout.js创建动态UI 本文引自:http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-entity-framework/using-web-api-with-entity-fra

如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)

客户端js无需任何专门设置,使用通常的ajax调用即可: $.ajax({ url: '跨域URL', type: 'get', dataType: 'json', success: function (data) { $('#banner_right').html(data); } }); 服务端需要在WebApiConfig.Register()中添加如下的代码 public static class WebApiConfig { public static void Register(Ht

关于js调用外部部署的web api

没想到多年之后我还得继续写这些东西.... 瀑布汗~ 最近不得不开始研究用web api MVC的项目中,在js文件里,实现点击一个按钮调用外部发布好的api,再从api把值回传给js页面,跳转. 经测试下面两种方法均有效获得api返回值. function testinfo(id) { $.ajax({ url: "http://158.14.51.103/api/Verify/Get", type: 'GET', dataType: 'JSON', data: { Id: id,

利用node js快速模拟Web API

Web API即使通过网络进行调用的API接口,与具体的编程语言无关.现在常见的是通过标准的HTTP GET/POST请求,从服务器获取响应的资源或服务,服务器返回调用的结果内容,一般为xml格式或者json格式的数据(现在使用json的更多). 在开发App的时候,一般原型设计好(如使用just in mind之类的工具)之后,我们会设计出与服务器交互的接口文档.一般情况下,App的开发进度(尤其原型)要快于服务器的开发进度.在App静态原型开发完到服务器实现所有的交互接口这段期间内,我们当然

ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目

 一.前言 这几年前端的发展速度就像坐上了火箭,各种的框架一个接一个的出现,需要学习的东西越来越多,分工也越来越细,作为一个 .NET Web 程序猿,多了解了解行业的发展,让自己扩展出新的技能树,对自己的职业发展还是很有帮助的.毕竟,现在都快到9102年了,如果你还是只会 Web Form,或许还是能找到很多的工作机会,可是,这真的不再适应未来的发展了.如果你准备继续在 .NET 平台下进行开发,适时开始拥抱开源,拥抱 ASP.NET Core,即使,现在工作中可能用不到. 雪崩发生时,没有一