zoukankan      html  css  js  c++  java
  • Javascript DOM 编程艺术读书笔记16/03/26

    更新时间 2016-04-02 15:41:55


    前言:

    javascript和html文件分离的原则

    jsp对web文档的操作,其实是对文档树种的节点进行操作,

    通式为:element.event = atciotn

    找元素的方法上一节就有提到过,下面回顾一下

    document.getElementById("id")

    document.getElementsByTagName("x")

    浏览器自定义了很多事件event,所以我们只需要告知浏览器,如果发生这些事件应该怎么办,

    以onload为例

    window.onload = function(){
    
      xxxx();//当然这些函数先要先定义
    
      yyy();
    }

     书中有个例子

    只要点击文档中<a>元素,就会打开一个弹出a指向相容的内容

    分析:

    我们首先要找出所有的链接元素,给所有元素添加处理函数,过程如下

    1. 把文档中的所有链接元素(a)放入数组
    2. 遍历数组元素
    3. 如果某个链接元素的class=“popup”,说明需要被点击时调用popUP()
    • 取消这个链接的默认行为,不要把这个链接的访问者带到新的窗口

    当然用到某个函数前,首先要进行定义

    定义popUp函数

    function popUp(winURL){
    
      window.open(winURL,"popup","width=100,height=100");
    
    }

    添加处理函数

    var links = document.getElementsByTagName("a");
    
    for(var i=0;i<links.length;i++){
    
      if(links[i].getAttribute("class")=="popup"){
    
        links[i].onclick = function(){
    
          popUp(this.getAttribute("href"));
    
          return false;
    
        }
    
      }
    
    }

    但是上述代码是有一定的问题,不会被运行

    javascript文件从html文档的<head>部分的<script>标签调用,而此时HTML文档还没有全部加载到浏览器中,文档模型不完整,没有完整的DOM,getElementsByTagName()不能正常运行

    var links = var document.getElementsByTayName("a");

    所以第一行这句被执行时,文档中还没有任何的"a"

    解决方案:当然我们可以把onclick添加到a的属性值中,但是和我们提倡的分离原则矛盾

    还要html全部加载到浏览器中时,浏览器自定义了一个监控器(onload),所以我们可以把上述的操作打包成处理函数,添加给触发器

    window.onload = function(){ 
         
    var links = document.getElementsByTagName("a");   for(var i=0;i<links.length;i++){     if(links[i].getAttribute("class")=="popup"){       links[i].onclick = function(){         popUp(this.getAttribute("href"));         return false;       }     }   } }

    但是我们的函数还不是完善的

    考虑到兼容性问题,我们需要对用到的内置函数进行检测

    function prepareLinks(){
    
      if(!document.getElementsByTagName)return false;
    
      if(!document.getElementsByTagName("a"))return false;//没有a元素,函数依然无作用
    
      var links = document.getElementsByTagName("a");
    
      for(var i=0;i<links.length;i++){
    
        if(links[i].getAttribute("class")=="popup"){
    
          links[i].onclick = function(){
    
            popUp(this.getAttribute("href"));
    
            return false;
    
          }
    
        }
    
      }
    }
    在一个谎言的国度,沉默就是英雄
  • 相关阅读:
    Centos8 安装mongodb
    java 时间处理
    从技术走向管理李元芳履职记 读书记录
    debian基本操作
    centos8 安装kudu
    k8s api调用示例
    idea other settings
    C# Random生成相同随机数的解决方案
    DropDownList绑定选择数据报错问题
    离谱
  • 原文地址:https://www.cnblogs.com/EdsonLin/p/5324705.html
Copyright © 2011-2022 走看看