美文网首页
JS:day09

JS:day09

作者: AnnQi | 来源:发表于2017-08-14 18:49 被阅读0次

一、JavaScript 的分层概念 和 JavaScript 库

JavaScript分层(从下往上)

①base层:

位于最低端,负责封装不同浏览器下JavaScript的差异,提供统一接口;也可以给上两层提供接口。

②common层:

位于中间端,依赖base层提供的接口,功能是给上一层提供组件。

③page层:

位于最顶端,功能是来完成页面内的功能需求。

base层(查看 IE 和 Firefox 的区别)

1.以下IE会弹出 item2,Firefox 会弹出 undefined ;两行注释IE会弹出 1 和 3;Firefox会弹出 3 和 7

<ul>
    <li id="item1"></li>
    <li id="item2"></li>
    <li id="item3"></li>
</ul>

<script>
    var item1 = document.getElementById("item1");
    alert(item1.nextSibling.id);
//    alert(item1.nextSibling.nodeType);  弹出 类型为文本节点3
//    alert(document.getElementsByTagName("ul")[0].childNodes.length);   弹出ul的全部子节点 7
</script>

2.以下把空格和换行去掉会弹出一致的 item2

<ul><li id="item1"></li><li id="item2"></li><li id="item3"></li></ul>

<script>
    var item1 = document.getElementById("item1");
    alert(item1.nextSibling.id);
</script>

3.以下用来判断浏览器的类型

<ul>
    <li id="item1"></li>
    <li id="item2"></li>
    <li id="item3"></li>
</ul>

<script>
    var item1 = document.getElementById("item1");
    var nextNode = item1.nextSibling;
//    Firefox 支持 document.all 这里用以判别浏览器的类型
    if(!document.all){
        while(true){
            if(nextNode.nodeType == 1){
                break
            }else {
                if(nextNode.nextSibling){
                    nextNode = nextNode.nextSibling;
                }else{
                    break;
                }
            }
        }
    }
    alert(nextNode.id);
</script>

base层封装函数

var GLOBAL = {};

GLOBAL.namespace=function(str){

    var arr=str.split("."),o=GLOBAL;

    for(i=(arr[0]=="GLOBAL")? 1:0; i<arr.length; i++){

        o[arr[i]]= o[arr[i]] || {};

        o=o[arr[i]];

    }

};

兼容 / 阻止冒泡事件

//IE 和 Firefox 兼容
GLOBAL.Event.getEventTarget = function (e) {
    e = window.event || e;
    return e.srcElement || e.target;
};

//阻止冒泡事件
GLOBAL.Event.stopPropagation = function (e) {
    e = window.event || e;
    if(document.all){
        e.cancelBubble = true;
    }else{
        e.stopPropagation();
    }
};

透明度

//设置透明度(id,透明度)
GLOBAL.Dom.setOpacity = function (nodeElement,level){
    if (document.all){
        nodeElement.style.filter = 'alpha(opacity='+ level +')';
    }else{
        nodeElement.style.opacity = level / 100 ;
    }
};


//  调用
    GLOBAL.Dom.get("test1");
    GLOBAL.Dom.setOpacity(test1,30);
    GLOBAL.Dom.get("test2");
    GLOBAL.Dom.setOpacity(test2,50);

监听click事件

<style>
        #box {
            width: 100px;
            height: 100px;
            background-color: red;
        }

    </style>


<div id="box">
    <input type="button" value="提交" id="btn"/>
</div>


<script>
    var btn = document.getElementById("btn");
    if(document.all){
        btn.attachEvent("onclick",function(){
            alert(1);
        });
    } else{
        btn.addEventListener("click",function(){
            alert(1);
        },false);
    }
    if(document.all){
        btn.attachEvent("onclick",function(){
            alert(2);
        });
    } else {
        btn.addEventListener("click", function () {
            alert(2)
        }, false);
    }
</script>
监听封装函数
//监听click事件
GLOBAL.Event.on = function (nodeElement,eventType,handler){
    if(document.all){
        nodeElement.attachEvent("on" + eventType,handler);
    }else{
        nodeElement.addEventListener(eventType,handler,false);
    }
};

Tab组件的扩展

<div class="tab">
    <ul class="tab-menu" id="tab-menu">
        <li>menu1</li>
        <li>menu2</li>
        <li>menu3</li>
        <li>menu4</li>
    </ul>
    <div class="tab-content" id="tab-content">
        <div>content1</div>
        <div style="display: none">content2</div>
        <div style="display: none">content3</div>
        <div style="display: none">content4</div>
    </div>
</div>
<script>
    var tabMenu = document.getElementById("tab-menu").getElementsByTagName("li"),
            tabContent = document.getElementById("tab-content").getElementsByTagName("div");

//    两种解决for循环的Bug
//    1.利用命名空间闭包
    for(var i=0;i<tabMenu.length;i++){
        (function(_i){
            tabMenu[_i].onclick = function(){
    //            遍历数组,隐藏所有 tabContent
                for(var j=0;j<tabContent.length;j++){
                    tabContent[j].style.display = "none";
                }
                tabContent[_i].style.display = "block";
            }
        })(i);
    }

//     2.给DOM节点添加 _index 属性,属性等于索引
//    for(var i=0;i<tabMenu.length;i++){
//            tabMenu[i]._index=i;
//            tabMenu[i].onclick = function(){
//                //            遍历数组,隐藏所有 tabContent
//                for(var j=0;j<tabContent.length;j++){
//                    tabContent[j].style.display = "none";
//                }
//                tabContent[this._index].style.display = "block";
//            }
//    }

</script>

相关文章

  • JS:day09

    一、JavaScript 的分层概念 和 JavaScript 库 JavaScript分层(从下往上) ①bas...

  • Day09 Js continue

    1. 数组 1.1 数组的构造 1.2数组的方法 2.String方法 3.正则表达式 3.1 正则表达式的构造 ...

  • 自律给我自由—Day009

    【叶子姑娘的自律100天挑战 Day09】 2019.01.23 Day09/100 【早起】第十二天早起。 【阅...

  • day09 vue.js起步

    Vue核心:采用简洁的模板语法来声明式地将数据渲染进DOM

  • 三阶段day09-前后分离、ajax

    day09: 前后分离,ajax 前后分离 ajax

  • 四、canvas

    阻止IE6下的默认行为:image.png day09

  • 2018-12-16

    Day09 Object、日期与时间、System、StringBuilder、包装类 1.Object类 1.1...

  • 2018-08-23 day09 JS补充

    // 获取可视区的宽度和高度// 获取宽高的时候,要看有没有DTD的说明,如果有,使用documentElemen...

  • 五、canvas(使用图片&设置背景)

    在canvas中插入图片(需要image对象) 在canvas中设置背景(需要image对象) 渐变 day09

  • js day09 正则和字符串01

    1. 2.字符串中的API:所有字符串中的API都无权修改原字符串,必须返回新字符串 1)toUpperCase(...

网友评论

      本文标题:JS:day09

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