美文网首页
javascript基础学习笔记4

javascript基础学习笔记4

作者: Shinemax | 来源:发表于2018-02-27 10:29 被阅读0次

    查找元素

    1.getElementById
    2.getElementsByTagName
    3.getElementsByClassName
    4.querySelector
    5.querySelectorAll

    get的方法是动态查询的,后面添加的也能查询。query的方法是静态的,只查找一次,后面的不会在添加。

    元素类型
    1.元素节点
    2.属性节点
    3.文本节点
    8.注释节点
    9.document节点
    10.documentFragment

    查找节点的方法:
    parentNode:找父节点
    childNodes:所有子节点(类数组)
    firstChild:第一个子节点
    lastChild:最后一个子节点
    nextSibling:下个兄弟节点
    previousSibling:上个兄弟节点

    节点的方法
    nodeName:获取节点名字,只读不能修改
    nodeValue:只能获取文本节点和注释节点的值,可修改
    nodeType(最常用):可以获取节点类型(int)
    attribute:获取属性节点的数组
    hasChildNodes:是否有子节点

    DOM结构树
                Document---HTMLDocument(XMLDocument)
    Node---CharacterData---Text、comment
                Element---HTMLElement---HTMLBodyElement、HTMLHeadElement...
                Attr

    封装函数,对e节点传入一个n值,若为正,则返回后面第nge兄弟元素节点,若为负,返回前面第n个元素节点,若为0则返回自己

    function retSibling(e, n) {
        while (e && n) {
            if (n > 0) {
                if (e.nextElementSibling) {
                    e = e.nextElementSibling;
                } else {
                    //IE8没有nextElementSibling
                    for (e = e.nextSibling; e && e.nodeType != 1; e = e.nextSibling);
                }
                n--;
            } else {
                if (e.previousElementSibling) {
                    e = e.previousElementSibling;
                } else {
                    for (e = e.previousSibling; e && e.nodeType != 1; e = e.previousSibling);
                }
                n++;
            }
        }
        return e;
    }
    

    脚本化css

    window.getComputedStyle(elem,null)..获取元素真实能看到的属性,第二个参数是伪元素,只读,返回样式的值经过转换(em会转换为px)
    ele.currentStyle..在IE8下获取元素属性,只读,返回样式的值不会经过转换

    offsetLeft/offsetRight/offsetWidth/offsetHeight/offsetParent:其顶部是否有定位的元素,有就返回

    event

    事件处理模型 冒泡(自底向上)/捕获(自顶向下)(只有chorme实现)
    捕获:elem.addEventListener('click',function(){},true);
    先捕获,后冒泡----谁先绑定,谁先执行

    focus,blus,select,change,reset,submit不冒泡

    取消默认事件 href="javascript:Void();"
    Void直接返回里面的参数,也能取消默认事件

    event || window.event(只适用于IE)

    事件源对象
    1.event.target 火狐浏览器
    2.event.srcElement IE浏览器
    3.chorme都有

    div.setCapture():把任何地方获取的事件都触法在div上
    div.releaseCapture()

    e.button = 2(右键)
    e.button = 1(左键)

    移动端是touchstart touchmove touchend

    键盘事件
    keydown keyup keypress
    keydown>keypress>keyup
    keydown:可以相应任何按键
    keypress:只可相应字符按键,返回ascii码,也能转换为字符
    属性(which是键盘上的位置,charCode是acsii值)

    domtree csstree rendertree(渲染树)
    window.onload是要等所有的dom css render加载完之后,最后加载

    //封装函数,对e节点传入一个n值,若为正,则返回后面第nge兄弟元素节点,若为负,返回前面第n个元素节点,若为0则返回自己
    function retSibling(e, n) {
        while (e && n) {
            if (n > 0) {
                if (e.nextElementSibling) {
                    e = e.nextElementSibling;
                } else {
                    //IE8没有nextElementSibling
                    for (e = e.nextSibling; e && e.nodeType != 1; e = e.nextSibling);
                }
                n--;
            } else {
                if (e.previousElementSibling) {
                    e = e.previousElementSibling;
                } else {
                    for (e = e.previousSibling; e && e.nodeType != 1; e = e.previousSibling);
                }
                n++;
            }
        }
        return e;
    }
    //获取网页滑动距离
    function getScrollOffset() {
        if (window.pageXOffset) {
            return {
                x: window.pageXOffset,
                y: window.pageYOffset
            }
        } else {
            return {
                x: document.body.scrollLeft + document.documentElement.scrollLeft,
                y: document.body.scrollTop + document.documentElement.scrollTop
            }
        }
    }
    //获取网页宽高
    function getViewportOffset() {
        if (window.innerWidth) {
            return {
                x: window.innerWidth,
                y: window.innerHeight
            }
        } else {
            //判断是否为怪异模式
            if (document.compatMode == 'backCompat') {
                return {
                    x: document.body.clientWidth,
                    y: document.body.clientHeight
                }
            } else {
                return {
                    x: document.documentElement.clientWidth,
                    y: document.documentElement.clientHeight
                }
            }
        }
    }
    //获取样式
    function getStyle(elem, prop) {
        if (elem.currentStyle) {
            return elem.currentStyle[prop];
        } else {
            return window.getComputedStyle(elem, null)[prop];
        }
    }
    //给元素添加事件类型的方法
    function addEvent(elem, type, handle) {
        if (elem.addEventListener) {
            elem.addEventListener(type, handle, false);
        } else if (elem.attachListener) {
            elem.attachEvent('on' + type, function () {
                handle.call(elem);
            })
        } else {
            elem['on' + type] = handle;
        }
    }
    //移除元素上的事件
    function removeEvent(elem, type, handle) {
        if (elem.removeEventListener) {
            elem.removeEventListener(type, handle, false);
        } else {
            elem.detachEvent(type, handle);
        }
    }
    //取消冒泡
    function stopBubble(event) {
        if (event.stopPropagation) {
            event.stopPropagation();
        } else {
            event.cancleBubble = true;
        }
    }
    //取消默认事件
    function cancleHandler(event) {
        if (event.prenventDefault) {
            event.prenventDefault();
        } else {
            event.returnValue = false;
        }
    }
    //拖拽方法
    function drag(elem) {
        var divX, divY;
        addEvent(elem, 'mousedown', function (e) {
            var event = e || window.event;
            divX = -parseInt(elem.offsetLeft) + event.pageX;
            divY = -parseInt(elem.offsetTop) + event.pageY;
            addEvent(document, 'mousemove', mouseMove);
            addEvent(document, 'mouseup', mouseUp);
            stopBubble(event);
            cancleHandler(event);
        });
        function mouseMove(e) {
            var event = e || window.event;
            elem.style.left = event.pageX - divX + 'px';
            elem.style.top = event.pageY - divY + 'px';
        }
        function mouseUp(e) {
            var event = e || window.event;
            removeEvent(document, 'mousemove', mouseMove);
            removeEvent(document, 'mouseup', mouseUp);
        }
    }
    

    相关文章

      网友评论

          本文标题:javascript基础学习笔记4

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