zoukankan      html  css  js  c++  java
  • JavaScript知识点记录

    HTML DOM介绍

    网页被加载时,浏览器会创建页面的文档对象模型(document object model)
    DOM可以对页面元素进行 增 删 改 查.

    查找HTML元素

    • document.getElementById() 通过ID来查找
    • document.getElementsByClassName() 通过类名 获取的是一个类数组
    • document.getElementsByTagName() 通过标签名 获取的是一个类数组

    可以通过JavaScript来创建动态的HTML.

    JavaScript 能够改变页面中的所有 HTML 元素
    JavaScript 能够改变页面中的所有 HTML 属性
    JavaScript 能够改变页面中的所有 CSS 样式
    JavaScript 能够对页面中的所有事件做出反应


    节点

    node 节点树形结构里面的成员,都称之为节点
    节点的类型:
    nameName nodeValue nodeType
    标签(元素)节点 页面上的元素 1
    属性节点 标签的属性 2
    文本节点(空格、回车、文本) 文本节点 3
    注释节点 就是页面中被注释掉的内容 8

    节点层次

    • 父节点 parentNode
    • 子节点 childNodes 获取到的是元素节点和文本节点
      children 只会获取元素子节点
    • 兄弟节点
    • 下一个兄弟节点
      node.nextSibling 可以是元素/属性/文本节点 ie8以下只能获取到元素/非空文本节点
      node.nextElementSibling 只获取元素节点 ie8以下不兼容
    //    处理兼容的函数
        function getNextElementNode(element) {
            var nNode = null;
            if(element.nextElementSibling){
                nNode = element.nextElementSibling;
            }else {
               nNode = element.nextSibling;
                while(nNode && nNode.nodeType != 1){
                    nNode = nNode.nextSibling;
                }
            }
            return nNode;
        }    
    
    • 上一个兄弟节点
      node.previousSibling 可以是元素/属性/文本节点 ie8以下只能获取到元素/非空文本节点
      node.previousElementSibling 只获取元素节点 ie8以下不兼容
    • firstChild lastChild 获取第一个/最后一个(元素 文本 属性)节点 ie8下忽略空文本节点
    • firstElementChild lastElementChild 获取第一个/最后一个元素子节点 ie8下不支持
    • 子元素的数量
      childElementCount 获取节点下所有子元素的个数 ie8不支持
      使用 parent.children.length

    节点操作

    创建元素

    • document.write 想body输出一个元素或者文本 覆盖之前的
      document.write("")
    • innerHTML 可以向某个node添加子元素,覆盖之前的
      node.innerHTML=""
    • document.createElement 创建一个想要的标签,得到一个元素节点对象
      var div = document.createElement("div") 创建后,存在内存里

    克隆

    • node.cloneNode(deep)
      deep:是否深度克隆(后代元素也复制过来) (为防止兼容问题,不要省略deep)
      ps: 克隆节点需手动添加进结构中 克隆id也相同

    追加

    • parentNode.appendChild(childNode)
      子节点追加在父节点的最后
      如果子节点存在结构中,追加后,原位子不存在了

    插入元素

    • parentNode.insertBefore(newChild,oldChild)

    删除元素

    • parentNode.removeChild(childNode)

    替换元素

    • parentNode.replaceChild(newChild,oldChild)

    事件

    • 事件就是浏览器发生点击/鼠标移入..某个元素时发生的.事件分为:触发-用户或浏览器触发一个事件. 响应-执行某个函数.
    • 时间三要素谁(页面元素) 做了什么(事件类型) 怎么做(处理函数)

    注册事件

    • 行内式 写在标签属性内
      <input type='button' value='点击' onclick='fn()'>
    • on node.on+事件类型=fn 缺点:只能注册一次事件
    • addEventListener方式 可以为对象注册一个事件,执行多个函数

    常用事件

    onclick 鼠标单击 ondblclick 鼠标双击
    onkeydown 键盘按下触发 onkeyup
    onchange 文本内容或下拉菜单选项变化时
    onfocus 获得焦点
    onblur 失去焦点
    onmouseover onmouseout 鼠标移入 移除
    onload 文档加载完成 onunload 关闭网页触发
    onsubmit 表单提交事件
    兼容性:ie6 7 8不支持

        node.addEventListener("click",function () {
            alert("test");
        },false);    
    
    • attachEvent
      兼容性:ie 6 7 8支持
        node.attachEvent("onclick",function () {
            alert("test");
        })
    

    注册事件的兼容写法

        function addEventListener(element,eventName,fn) {
            if(element.addEventListener){
                element.addEventListener(eventName,fn,false);
            }else {
                element.attachEvent("on"+eventName,fn);
            }
        }
    
        addEventListener(btn,"click",function () {
            alert("");
        })
    

    事件的三个阶段

    • 事件捕获阶段 事件由外而内的阶段
    • 事件目标阶段
    • 事件冒泡阶段 事件触发由内而外的阶段
      事件只会存在 捕获和目标 / 冒泡和目标 这2个阶段 捕获和冒泡不会同时出现
    • 事件冒泡的影响 子元素和父元素注册了同样的事件,如果子元素触发了事件,那么父元素也会触发
    • 阻止事件冒泡
      ie/谷歌 window.event.cancelBubble=true
      谷歌/火狐 event.stopPropagation()

    事件的类型

    event.type 返回不带on的事件名称


    排他方法

        function  exclusive() {
    //        1 先把所有的按钮的value都改成2
            for (var j = 0; j < btns.length; j++) {
                btns[j].value = "2";
            }
    //        2 还要把点击的按钮变成1
            this.value = "1";
        }
    

    获取和设置文本

    • innerHTML 用来获取或设置某个元素的内容(包括标签) 所以主流浏览器都支持

    • innerText 用来获取或设置某个元素内容(只能得到文本)

    • 兼容性:早期火狐不支持innerText,支持textContent
        //兼容写法
        function setInnerText(element,text) {
            if(element.innerText !== undefined){
                element.innerText = text;
            }else {
                element.textContent = text;
            }
        }
    

    DOM操作元素的样式

    • 设置元素的className属性 node.className="" 配合css使用
    • 设置元素的样式 node.style.attr="value" 实际作用于style的行内式中,只能获取到行内样式.

    定时器

    setTimeout

    • 让浏览器延时一定时间后执行一个函数
      var id = setTimeout(function(){},time) time-毫秒
    • clearTimeout(id) 清除对应的setTimeout

    setInterval

    • 让浏览器隔一段时间就执行一次函数
      var id = setInterval(function(){},time) time-毫秒
    • clearInterval(id)

    offset

    相对于 offsetParent 的偏移量. 一般是body的左上角. 脱标定位:相对谁定位,offsetParent就是谁. fixed: offsetParent 为null 相对于浏览器可视区域左上角
    width/height:padding+border+content

    • offsetLeft offsetTop offsetWidth(元素实际宽度) offsetHeight

    scroll

    滚动 相对于父元素

    • scrollLeft scrollTop(滚动出去的距离)
    • scrollWidth scrollHeight 如果元素宽度/高度大于内容宽度/高度,返回元素的宽度/高度(不包括滚动条),否则返回元素内容的宽度/高度

    client

    可视区域 元素的大小或者浏览器

    • clientTop clientLeft clientWidth clientHeight
    • 可视区域坐标 clientX clientY
    • pageX pageY 页面坐标

    事件对象的兼容 event=window.event || event

    • getComputedStyle 获取元素的所有计算过后的样式对象window.getComputedStyle(element,pseudoElt)
    • currentStyle 获取元素的所有计算过后的样式对象element.currentStyle

    正则

  • 相关阅读:
    如何让position:fixed在IE6中工作 不抖动
    【javascript基础】之【宿主环境】
    用函数式编程技术编写优美的 JavaScript
    IE6下使用滤镜后链接不能点击的BUG
    什么是内存泄漏
    Best Practices for Speeding Up Your Web Site
    Object.prototype.toString.call()
    【前端优化】IE浏览器下同一网页多图片显示的瓶颈与优化
    get username
    open file and format readin
  • 原文地址:https://www.cnblogs.com/caijunjun/p/6636971.html
Copyright © 2011-2022 走看看