美文网首页
js笔记存了好久,拿出来晒晒太阳【小白用】

js笔记存了好久,拿出来晒晒太阳【小白用】

作者: 美文古风_柒色 | 来源:发表于2017-11-22 10:26 被阅读16次

    r1 软件使用

    ctrl+shift+p  html

    html5结构: !  tab

    ul>li{内容}*5 tab

    光标定位到指定的多个位置 ctrl

    选中多个  ctrl+d

    预览:右键复制文件路径

    2、DOM高级

    1查找节点

    1)  getElementById(id名)  id名

    2)  getElementsByTagName(标签名)  nodeList 节点列表  数组  [0]

    3)  getElementsByName(name名)  表单  nodeList 节点列表  数组  [0]

    4) getElementsByClassName(样式名)  IE9以下浏览器不兼容  报错

    5) css选择器    IE9以下浏览器不兼容

    [id选择器  类选择器  标签选择器]

    querySelector(css选择器)    只能获取第一个元素

    querySelectorAll(css选择器)  获取所有的元素 ,nodeList 数组

    6)特殊的集合

    document.forms 获取所有的表单元素 等价于document.getElementsByTagName("form")

    elements  获取所有的表单对象元素 nodeList数组  elements[0] 获取的第一个表单元素

    elements.length 表单元素的个数

    document.images  获取页面中所有的图片  等价于document.getElementsByTagName("img")

    创建图片标签 var ing=new Image;

    document.links  获取所有带href属性的超链接

    等价与 document.getElementsTagName(“a”)

    document.anchors  获取所有带name属性的超链接

    2、节点方法:

    增删改查

    插入节点

    父节点.appendChild(子节点)

    父节点.insertBefore(新节点,哪个节点前)

    创建节点

    创建文本节点  document.createTextNode(文本)

    创建元素节点  document.createElement(元素名)

    删除节点

    父节点 .removeChild(子节点)

    替换节点

    父节点.replaceChild(新节点,要替换的节点)

    复制节点(克隆节点)

    要复制的节点.cloneNode() false  只复制结构不复制内容

    true  结构 内容都复制

    3、 DOM中HTML属性(特性):

    标准属性  href  id  title  class  checked  src

    获取属性:

    元素.属性名

    设置属性:

    元素.属性名=属性值

    .checked=true

    .title="标题"

    .src=""

    .className="bg"  //特殊

    自定义属性  data-time="2015/12/2"  data-pic=""

    元素.属性名 无法获取和改变自定义属性的值。

    获取属性:

    元素.getAttribute("属性名")

    设置属性:

    元素.setAttribute("属性名","属性值")

    删除属性:

    元素.removeAttribute("属性名")

    既可以设置标准属性,也可以设置自定义属性。

    4、节点属性:

    节点类型  nodeType  1元素节点  2属性节点 3文本节点  8 注释节点  9 文档节点

    节点名称  nodeName  标签名    属性名    #text

    节点值    nodeValue  null      属性值  文本本身

    5、节点之间的关系:

    parentNode  父节点  子节点 childNodes.length childNodes[0]  firstChild  lastChild childNodes[childNodes.length-1]

    兄弟节点  下一个兄弟节点 nextSibling 上一个兄弟节点  previousSibling

    ————————————————————————

    DOM表格操作

    table : thead  一个

    tbody  多个

    tfoot  一个

    查找表格的元素:thead  tbody  tfoot  cells  rows

    //获取表头 对象.tHead  一个

    //获取表尾 对象.tFoot    一个

    //获取主体部分 对象.tBodies 多个 nodeList 数组

    //获取行  对象.rows nodList 数组 rows[0]

    //获取单元格  对象.cells nodeList 数组 cells[0]

    //插入行  对象.insertRow(index)

    //插入单元格  对象.insertCell(index)

    //删除行  对象.deleteRow(index)

    //删除单元格 对象.deleteCell(index)

    1全选:

    _______________________________

    css样式的问题:

    行内样式

    获取样式:

    节点.style.css属性

    节点.style[css属性]  常量直接写 ,变量呢?[变量名]  变量或者参数。

    返回值: 是一个带单位的字符串

    设置样式:

    节点.style.css属性=值

    节点.style[css属性]=值

    非行内样式:

    获取非行内样式

    标准浏览器(非IE)

    getComputedStyle(obj,null).css属性

    getComputedStyle(obj,null)[css属性]

    IE浏览器下

    obj.currentStyle.css属性

    obj.currentStyle[css属性]

    function getStyle(obj,style){

    if(obj.currentStyle){

    return  obj.currentStyle[style]

    }

    else{

    return  getComputedStyle(obj,null)[style]

    }

    }

    ------------------------------

    元素大小,  js盒模型 返回值:  只能获取不能设置,没有单位,是数值类型。

    偏移量:元素在屏幕上占用的所有可见空间。

    尺寸:  offsetWidth    元素自身的宽度  width+border+padding

    offsetHeight    元素自身的高度  height+border+padding

    位置:  offsetLeft    元素左边框距离父元素的距离(如果没有定位,就是相对于浏览器窗口。如果有定位,是对有定位的父级元素)

    offsetTop      元素上边框距离父元素的距离

    客户端(客户区)大小

    clientWidth  width+padding

    clientHeight  height+padding

    (浏览器窗口大小) 可视区大小  视口

    宽度:document.documentElement.clientWidth

    高度:document.documentElement.clientHeight

    宽度  document.documentElement.clientWidth  ||  document.body.clientWidth

    高度  document.documentElement.clientHeight ||  document.body.clientHeight

    滚动大小  包含滚动内容的元素大小。

    scrollTop  滚动条向上滚动的距离

    scrollLeft  滚动条向左滚动的距离

    top=    document.documentElement.scrollTop  ||  document.body.scrollTop

    document.documentElement.scrollTop=0

    document.body.scrollTop=0

    scrollWidth  在没有滚动条的情况下,元素内容的总宽度。

    scrollHeight  在没有滚动条的情况下,元素内容的总高度。

    _____________________

    事件:

    事件的概念:文档或者浏览器窗口中发生一些特定交互瞬间。(用户或者浏览器自身执行的某种动作)

    事件流:  页面接收事件的顺序。

    IE  微软公司:事件冒泡流

    N 网景公司:  事件捕获流

    DOM2事件流分三个阶段:事件捕获阶段,处于目标阶段,事件冒泡阶段

    事件对象: 所有与事件相关的信息。事件的类型  鼠标的位置  事件的目标

    阻止冒泡: DOM下:  event.stopPropagation()  IE: event.cacelBubble=true

    阻止默认行为: DOM下: event.preventDefault()  IE: event.returnValue=false  return false

    1)如何访问事件对象?

    标准浏览器下 DOM中:作为函数的第一个参数存在

    IE浏览器中  IE中: 作为window对象的属性存在 window.event

    function(e){}

    var  event=e(第一个参数) || window.event

    2)  动作:

    阻止事件冒泡行为

    标准浏览器下 DOM中 : event.stopPropagation()  停止传播

    IE浏览器下:        event.cancelBubble=true  取消冒泡

    跨浏览器兼容阻止冒泡:

    function stopPropagation(e){

    if(e.stopPropagation){

    e.stopPropagation()

    }

    else{

    e.cancelBubble=true

    }

    }

    ——————————————

    3)动作:

    阻止默认行为

    DOM中:event.preventDefault()  阻止默认行为

    IE中:  event.returnValue=false  返回值=false  // return  false

    function  preventDefault(e){

    if(e.preventDefault){

    e.preventDefalut();

    }

    else{

    e.returnValue=false

    }

    }

    4) type  事件类型  click  mouseover  mouseout

    语法格式:event.type

    返回值: click  mouseover  mouseout

    5) 事件目标  :你实际操作的目标对象 ,不一定是你绑定事件的对象

    target

    DOM: event.target

    IE:  event.srcElement

    target=event.target ||  event.srcElement

    6)事件委托:利用冒泡的原理,只指定一个事件处理程序,就可以管理某一类型的所有事

    件。

    鼠标划过多li添加背景,鼠标离开删除背景。

    7)事件对象的在浏览器中坐标  水平 event.clientX    垂直坐标 event.clientY

    事件对象在屏幕上的坐标    水平  event.screenX  垂直坐标 event.screenY

    事件对象的属性:

    访问事件对象event=e || window.event

    类型 event. type  目标:event.target || event.srcElement  鼠标的位置: event.clientX  event.clientY

    方法:阻止冒泡 ,阻止默认行为

    事件处理程序:

    HTML事件处理程序: 在HTML中绑定的事件。缺点:不能实现行为和结构的分离。

    DOM0事件处理程序:

    优点:简单, 跨浏览器兼容。

    缺点: 不能同时绑定多个事件。

    添加(绑定):

    语法:对象.on事件类型=fn;

    说明:

    fn 匿名函数也可以是有名函数;

    btn.onclick=function(){}

    btn.onclick=say  只写函数名

    删除:

    语法:对象.on事件类型=null;

    DOM2事件处理程序:

    优点:同时绑定多个事件处理程序。

    添加(绑定)            语法:对象.addEventListener(事件名,函数,布尔值)  false 冒泡阶段 true 捕获阶段

    删除:                  语法:对象.removeEventListener(参数与添加的参数完全相同)                  //不能删除匿名函数

    IE事件处理程序:

    优点:同时绑定多个事件处理程序。

    添加                  语法: 对象.attachEvent(on+事件名,函数)

    删除:                语法: 对象.detachEvent(on+事件名,函数)  参数与添加的的时候完全一样

    跨浏览器的事件处理程序:

    addHandler()

    3、事件类型:

    UI事件:不一定与用户操作有关

    load  unload scroll  error  resize  select

    window.onload=function(){  }

    resize

    添加样式:

    对象.style.cssText="color:red;font-size:12px; background:red"

    对象.style.background=''

    焦点事件:

    focus  获取焦点事件

    blur  失去焦点事件

    键盘事件:

    keydown    按下任意键时,触发

    keypress    按下字母键时候,触发

    keyup      释放按键的时候,触发

    keyCode  获取按键的ascii码

    回车键    13

    空格键    32

    A-Z        65-

    0-9        48

    左上右下  37  38 39  40

    鼠标事件:

    click

    mouseover  划过

    mouseout  离开

    mousedown

    mouseup

    mousemove

    dbclick

    mouseenter  进入  不冒泡

    mouseleave  离开  不冒泡

    _______________________________________

    表单:

    表单的提交和重置的方式:

    1)    提交的三种方法    按钮提交

              图像域 提交

    提交  自定义提交按钮

    表单提交的方法:  表单对象.submit()

    2)  重置,reset 与提交一样。 reset()

    表单元素的事件:

    blur

    focus

    change  select下拉列表框内容发生改变的时候

    text textarea 对文本框和文本域来说,是内容发生改变并且取消焦点的时候

    select:

    选中:selected

    获取选中的索引  select.selectedIndex

    value的取值意义: select.value  获取的是值2.优先获取的是value="值1",如果

    没有值1,获取值2。

    表单元素的三个方法:

    focus()

    blur()

    select()

    select 属性:

    multiple  多选

    size      长度 个数

    options    返回的是一个数组

    select.options.length

    select.options[index]

    option 属性:

    options[index].text  文本

    options[index].value 值

    options[index].index  下标

    selected 选中

    创建option元素:  new Option(text,value)

    添加option元素:  select.add(newOption,undefined)

    删除option元素:  select.remove(index)

    删除所有的option 有两种方法:  select.innerHTML=''  select.options.length=0

    ________________________

    正则表达式:由字母、数字、特殊符号构成的描述字符模式的表达式。

    功能:1.模式的匹配

    2.文本的检索

    3.替换功能。

    创建正则表达式:

    一、创建:

    1)显式创建  用构造函数的    var reg=new RegExp('表达式')    数据类型:对象类型

    var reg=new RegExp('表达式','修15:54 2016/8/10饰符')  i

    2) 隐式创建  直接量语法    /表达式/    包含在一对/斜杠之间的字字符    表达式没有引号

    二、正则表达式的方法:

    1)  test()

    功能:用于检测内容是否与正则相匹配

    返回值:布尔值,true匹配,false不匹配

    语法:reg(Object).test(内容)

    2)  exec()

    功能:用于检测内容是否与正则相匹配

    返回值:能匹配成功 数组  不匹配  null

    语法: regObject.exec(内容)

    说明:数组的第一个元素:匹配的内容

    数组的index元素: 匹配内容的第一个字符索引下标

    数组的input元素:  原始字符串

    数组的第二个元素到 index元素之间的:是分组的匹配的内容 ()+  (){3,4}.如果没有undefined

    三、 修饰符:

    修饰符:

    i  忽略大小写

    m  多行匹配

    g  全文匹配

    四、 元字符

    [....]  匹配括号内的任意一个字符  [0123456789]  [abc]  [0-9]  [a-z]  [A-Z]  [0-9]{6}

    [^....]  匹配除了括号内的任意字符

    \d  代表数字  [0-9]

    \D  非数字    [^0-9]

    \w  代表的是字母数字下划线 [a-zA-Z0-9_]

    \W  代表的是非字母数字下划线

    .  除了换行符以外任意字符

    \s  空格字符

    \S  非空格字符

    \b  单词的边界

    \n

    \t

    \r

    五、重复:  设置重复的次数

    {n}  匹配前一项n次

    {n,m} 匹配前一项最少n次,最多m次  用户名只能是数字 长度在5-12之间  reg=/[0-9]{5,12}/

    {n,}  匹配前一项最少n次

    ? 匹配0到1次  {0,1}

    +  匹配1到多次  {1,}

    *  匹配0到多次  {0,}

    六、限定符:

    ^XX  以^开头

    XX$  以$结束

    七、转义字符:

    语法:\元字符

    元字符: [ ]  {}  ()  ? *  +  /  ^  $  .

    附加:

    选择:|或者

    分组():将多个匹配项组合为一个整体

    汉字:[\u4e00-\u9fa5] 有事100  有酒罚我

    [\x00-\xff]      单字符

    [^\x00-\xff]    双字符

    字符串的方法:

    replace() :

    语法:str.replace(要替换的(旧),替换为的(新的))

    功能:替换掉符合匹配的字符串。

    返回值:是一个新字符串,原字符不变。

    要替换的:可以是字符串 也可以是正则表达式,支持全文匹配

    练习:替换法轮功

    split():  把字符串转化位数组

    str="aaa  , bbb, ccc"

    str="6226  7895  454544 3443"

    语法:str.split('分隔符')

    返回值:数组,原字符串不变

    search():  返回匹配字符串的下标。

    语法:str.search(reg/字符串)

    match(): 返回匹配字符串的值。

    语法格式:str.match(reg/字符串)

    返回值:如果没有全局匹配的话;找到了返回第一个,数组。 找不到返回null

    如果全局匹配的化, 找不到null. 找到了返回所有的,数组。

    str="aaa bbb ccc"  每个单词的第一个字母变成大写

    str1='Aaa Bbb Ccc'

    ________________________________

    //作用域链 :

    //从里往外依次寻找,一直到到全局变量。但是不能从外往里找变量。

    //匿名函数

    //函数表达式  :先定义后执行

    //匿名函数的自执行  (要执行的匿名函数)(匿名函数的执行)

    闭包:就是能够读取其他函数内部变量的函数,

    只有函数内部的子函数才能读取局部变量,

    因此可以把闭包简单理解成“定义在一个函数内部的函数”.

    闭包的优点:

    1、读取函数内部的变量

    2、让函数内部变量的值始终保持在内存中。

    闭包的缺点:

    1、由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大。

    2、在IE中可能导致内存泄露。

    3、闭包会在父函数外部,改变父函数内部变量的值,不要随便改变父函数内部变量的值。

    闭包只能使用包含函数中任何变量的最后一个值(最终值)。

    一般情况,要把销毁,等待释放,垃圾回收。

    _________________

    对象:由属性和方法构成。

    属性:

    属性即变量,用于存取数据。

    方法:

    方法即函数,用于完成特定功能。

    对象分类:

    全局对象、内置对象及自定义对象。

    内置对象包括:

    string字符串对象

    Math数学对象

    Array数组对象

    Date日期对象

    RegExp正则表达式对象

    全局对象:即window对象。

    全局对象的函数(方法):

    isNaN()  isFinite()  paseInt()  paseFloat()

    alert() confirm()  setInterval() setTimeout() clearInterval() clearTimeout()

    创建自定义对象

    1、通过Object()构造函数或字面量方式创建

    (1)通过Object()构造函数  显示创建

    语法:var 对象名=new Object();

    (2)通过字面量(隐式创建)

    语法:var 对象名={};

    添加属性和方法:

    添加属性:对象名.属性名=属性值;

    添加方法:对象名.方法名=function(){};

    第二种方式:

    将添加的属性和方法放到字面量{}中。

    属性名:属性值,

    方法名:function(){}

    注意:属性与属性与方法之间用逗号隔开

    在自定义对象中this即该对象。

    第一种方式适用于创建单个对象,单体对象。

    缺点:使用同一个接口创建很多对象,会产生大量的重复代码。

    2、工厂模式

    定义:

    function createObj(name,sex,age){

    var o=new Object()

    o.name=name;

    o.sex=sex;

    o.say=function(){

    alert("你的名字是"+this.name+"你的性别是"+this.sex);

    }

    return  o

    }

    调用: var p1=createObj("张三","男",19)

    p1.constructor 指向不到createObj

    工厂模式缺点:没有解决对象识别的问题

    如何检测一个的对象的构造函数是谁呢? constructor  构造函数

    3、构造函数的模式

    定义:

    function CreateObj(name,sex,age ){

    this.name=name;

    this.sex=sex;

    this.age=age;

    this.say=function(){

    alert("你的名字是"+this.name+"你的性别是"+this.sex);

    }

    }

    调用:

    var p1=new CreateObj("张三","男",18)

    var p2=new CreateObj("李四","女",20)

    var arr= new Array()

    var time= new Date()

    var reg= new RegExp()

    var str= new String()

    构造函数模式与工厂模式的区别:

    ? 1、没有显式地创建对象;

    ? 2、直接将属性和方法赋给了this 对象;

    ?      3、没有return 语句。

    ? 4、通常构造函数名始终以大写字母开头,非构造函数名不以大写字母开头

    构造函数的缺点:

    使用构造函数模式创建对象的问题:每个方法都要在每个实例上重新创建一遍,浪费内存空间

    人(对象)  丁丁 (实例)

    用构造函数创建一个对象的过程会经历4个步骤:

    (1) 创建一个新对象;  new Person()

    (2) 将构造函数的作用域赋给新对象(因此this 就指向了这个新对象); this= p1  this =p2

    (3) 执行构造函数中的代码(为这个新对象添加属性);

    (4) 返回新对象

    4、原型的模式

    1)原型对象是什么

    每个函数都有一个prototype(原型)属性,这个属性是一个指针,  指向一个对象,这个对象即原型对象.

    使用原型对象优点:是可以让所有对象实例共享它所包含的属性和方法

    2)如何创建原型对象

    构造函数名.prototype.属性名=值

    构造函数名.prototype.方法名=function(){

    }

    其中:值可以为简单值(数值,字符串等),也可以是函数(即方法).

    3) 多个对象实例共享原型所保存的属性和方法的基本原理:

    搜索-->对象实例-->原型对象

    对象实例添加某个属性只会阻止我们访问原型中的那个属性,但不会修改原型中的那个属性值

    原型中的是属性和方法是所有实例共享的,他的添加顺序不影响实例的调用。

    4) 检测某个对象实例和原型之间是否存在对应关系:isPrototypeOf()

    构造函数名.prototype.isPrototypeOf(实例)

    Person.prototype.isPrototypeOf(p1)  存在关系true  不存在关系 false

    var  arr=new Array()

    5)检测一个属性是存在于实例中,还是存在于原型中:hasOwnProperty()

    语法格式:实例名.hasOwnProperty(属性)  属性属于实例,返回真,属于原型返回假。

    例如:p1.hasOwnProperty("name")

    6)确定原型和实例的关系

    实例名 instanceof  构造函数名  返回值:true  false

    -------------------

    继承:原型链继承

    subTye.prototype=new SuperType()  //子类型的原型指向父类型的对象实例  缺点:不能传参数  来自于包含引用类型值的原型。

    借用构造函数继承

    function SubTye(name,sex){    // 或者对象冒充  伪造对象

    SuperType.call(this,name,sex)

    SuperType.apply(this,数组名)

    }

    组合继承:

    原型链和借用构造函数继承一起使用

    错误处理和调试:

    error: 错误事件

    加载对象 window  第二个img 当图片无法加载的时候

    window.onerror=function(){

    }

    要求这放在js脚本的最前面。

    onerror: 传递3个三参数

    message:错误消息

    url:  错误所在的URL

    line:行号

    错误类型:

    类型转化错误

    数据类型错误

    通信错误

    相关文章

      网友评论

          本文标题:js笔记存了好久,拿出来晒晒太阳【小白用】

          本文链接:https://www.haomeiwen.com/subject/rpjpmxtx.html