webapi

Posted handsomenose

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webapi相关的知识,希望对你有一定的参考价值。


typora-copy-images-to: media

第02阶段.前端基本功.前端基础.入门语法

基础语法

学习目标

  • 理解

    • 了解DOM中常用的操作
    • 了解document对象
  • 重点

    • 掌握DOM中获取元素的常用方法
    • 掌握如何给元素注册事件
    • 掌握DOM中常用的非表单属性

1.认识DOM

**概念: **文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标记语言的标准编程接口

DOM的设计是以对象管理组织(OMG)的规约为基础的,因此可以用于任何编程语言。Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。

通俗理解: 把页面上的内容转换成对象的形式,通过操作对象,达到操作页面上标签和标签属性的一组方法

2. DOM 中常用的操作

  • 获取元素
  • 对元素进行操作(设置其属性或调用其方法)
  • 动态创建元素
  • 给元素注册事件

3. document对象

**概念: **document对象代表在浏览器中加载的页面

4.获取页面中的元素

什么是元素?

html中的标签在DOM中称为元素

为什么要获取页面上的元素呢?

​ 因为:我们想要操作页面上的元素,首先需要获取到对应的元素,然后才能进行后续操作

4.1 根据id获取元素

语法: document.getElementById(\'id名\');

作用: 在整个文档中查找id名为传入的值的元素,如果没有返回null

//html
<div id="box"></div>

//js
//在整个文档中查找id为box的元素
var div = document.getElementById(\'box\');
console.log(div);  //返回的是对应的元素

4.2 根据标签名获取元素

语法: document.getElementsByTagName(\'标签名\');

作用: 在整个文档中查找所有标签名为传入的值的元素,将这些所有符合条件元素的存放到一个伪数组中返回出来,如果没有就返回一个空的伪数组

//html
<div>div1</div>
<div>div2</div>
<div>div3</div>
//js
//在整个文档中查找所有的div标签
var divs = document.getElementsByTagName(\'div\');
for (var i = 0; i < divs.length; i++) {
  var div = divs[i];
  console.log(div);
} 

小结:

  • 通过document这个对象调用获取元素的方法
  • getElementById 返回的是对应的DOM元素, 如果没有返回null
  • getElementsByTagName 返回的是存储DOM元素的伪数组,如果没有返回空的伪数组

5.事件

5.1 什么是事件?

用户点击页面上的某个元素,或者表单上的某个文本框获得焦点等等,这些都是事件

5.2 为什么要学习事件?

因为作为一个网页开发者,我们要实现当用户点击某个元素时,我们要去实现对应的需求,所以我们要学习事件

5.3 如何实现这种需求呢?

5.3.1 事件的三要素

  • 事件源 : 监听事件的元素
  • 事件名 : 监听的事件类型
  • 事件处理函数 : 触发事件时,要调用的函数

5.3.2 如何注册事件

语法: 事件源.on + 事件名 = 事件处理函数

element.onclick = function(){}

//html
<div id="box" style="width:100px; height:100px; background-color: red"><div>
    
//js
var box = document.getelementById(\'box\');
//
box.onclick = function(){
    console.log(1);
}
    

5.4 给a标签注册事件时,需要注意的问题

a标签是超链接标签,在开发网页中,尽量多的使用a标签有利于网页的SEO,所以我们在做动态效果时,要经常给a标签注册点击事件

那么给a标签注册事件,到底要注意什么问题呢?

//html 
<a href = "" id = "link">点击在控制台打印数字1</a>

//js
var link = document.getElementById(\'link\');
link.onclick = function(){
    console.log(1);
}

//当我们执行了以上代码之后,我们发现在控制台并没有看到数字1.

//原因: 因为a标签是超链接标签,超链接标签默认是用来做页面跳转的,虽然我们没有在href属性中书写正确的url地址,但是当我们点击a标签时,页面也会重新刷新。所以当我们点击a标签时,触发了事件处理函数,并且执行了console.log(1)这行代码,但是当这行代码执行完毕之后,很快a标签的默认行为导致浏览器重新刷新了一遍,由于执行的速度非常快,所以我们肉眼根本看不到控制台上输出的1.

//所以为了解决这个问题,我们需要阻止a标签默认行为执行

link.onclick = function(){
    console.log(1);
    return false; //在事件处理函数中的最后一行写return false,就会阻止a标签默认行为的执行
}

6. DOM中常用的非表单元素属性

6.1 为什么要学习DOM中常用的非表单元素属性?

因为: 我们学习DOM就是为了通过访问元素的属性或者方法,来动态的改变元素的状态,比如,用js修改a标签href属性的值

6.2 常用的非表单元素属性有哪些?

  • href 超链接的url地址
  • title 标签的标题属性
  • id 标签的id属性
  • src 引入外部文件的路径
  • innerText 标签内的文本
  • innerHTML 标签内的内容

6.3 获取属性的值/设置属性的值

//html
<img src = "1.jpg" title="示例" id="img">
    
var img = document.getElementById(\'img\');
console.log(img.title) // 获取属性的值
img.title = \'动态修改\'  //设置属性的值
img.src = \'2.jpg\' //这行代码执行之后,会展示2.jpg的图片

案例: 点击按钮,切换图片

6.4 innerText 和 innerHTML

**作用: ** 给双标签的元素设置内容/获取双标签里面的内容

不同点:

innerText 只是用于获取文本或设置文本

innerHTML 不仅可以用于设置/获取文本,还可以识别html

相同点:

如果是赋值的话,都会覆盖元素内本身的内容

**注意: **

  • 这两个是用于双标签的属性

7. 课后综合练习

美女相册

8. 扩展内容@

8.1 定义id属性的元素,不获取直接使用

由于id名具有唯一性,部分浏览器支持直接使用id名访问元素,但不是标准方式,生产环境下(上线了)不推荐使用。

//html
<div id="box"></div>

//js
box.onclick = function(){
    console.log(1);
}

8.2 获取页面元素的其他方式

8.2.1 根据name属性获取元素 (有兼容问题,不同的浏览器实现不同)

在IE和Opera中, getElementsByName() 方法还会返回那些id为指定值的元素。

语法: document.getElementsByName(\'name属性的值\')

**作用: ** 在整个文档中查找所有name属性值为传入的值的元素,将这些所有符合条件元素的存放到一个伪数组中返回出来,如果没有就返回一个空的伪数组

//html
<input type="checkbox" name="hobby">

//js
var inputs = document.getElementsByName(\'hobby\');
//返回一个伪数组
for (var i = 0; i < inputs.length; i++) {
  var input = inputs[i];
  console.log(input);
}
8.2.2 根据类名获取元素 (有兼容问题,ie9+支持)

语法: document.getElementsByClassName(\'类名\')

**作用: ** 在整个文档中查找所有class属性值为传入的值的元素,将这些所有符合条件元素的存放到一个伪数组中返回出来,如果没有就返回一个空的伪数组

//html
<div class="main"></div>
    
//js
var mains = document.getElementsByClassName(\'main\');
//返回一个伪数组
for (var i = 0; i < mains.length; i++) {
  var main = mains[i];
  console.log(main);
}
8.2.3 根据选择器获取元素 (有兼容问题,ie8+支持)

语法: document.querySelector(\'选择器\');

作用: 在整个文档中查找所有符合选择器值的元素,但是只返回其中的第一个元素,如果没有返回null

注意: 如果想要所有符合选择器值的元素,请使用 querySelectorAll方法

querySelectorAll返回的是一个伪数组,如果没有则返回空的伪数组

//html
<div class="element">div1</div>
<div class="element">div2</div>
<div class="element">div3</div>

//js
//在整个文档中,查找类名为element的元素,
var div = document.querySelector(\'.element\');
console.log(div); //返回的是所有符合条件中的第一个

var divs = document.querySelectorAll(\'.element\');
//返回的是一个伪数组, 伪数组中存储了所有符合条件的元素
for (var i = 0; i < divs.length; i++) {
  var box = divs[i];
  console.log(box);
}

8.3 DOM中元素可以使用的获取元素的方法

element.getElementsByTagName(\'标签名\')

element.getElementsByClassName(\'类名\')

element.querySelector(\'选择器\')

element.querySelectorAll(\'选择器\')

//以上这些方法也可以使用获取到的DOM对象调用
//使用document调用这些方法是在整个页面中查找
//使用获取到的DOM对象调用这些方法,是在当前DOM对象的里面查找


//html
<div>中国</div>
<div id="center">
    北京
	<div>昌平</div>
	<div>海淀</div>
</div>

//js
var center = document.getElementById(\'center\');
var divs = center.getElementsTagName(\'div\');
console.log(divs); //返回的伪数组中只有昌平和海淀

8.4 innerText 和 innerHTML的兼容问题

  • innerHTML是非标准属性(非w3c标准),但是所有的浏览器都支持
  • innerText属性存在兼容性问题,早期的火狐浏览器不支持该属性,使用textContent替代

以上是关于webapi的主要内容,如果未能解决你的问题,请参考以下文章

RestFramework

添加 DelegatingHandler 后,WebAPI 2 出现间歇性 CORS 问题

Django REST framework 基本组件

Django REST framework序列化

rest_framework

OData JSON camelCase