• 前端学习之-- DOM


    Dom == document

    1:查找
      1:直接查找
      document.getElementById('i1') # 根据ID获取一个标签(获取单个元素)
      document.getElementsByTagName('div') # 根据标签名获取标签集合(获取多个元素列表)
      document.getElementsByClassName('c1') # 根据class属性获取标签集合(获取多个元素列表)
      document.getElementsByName('n1') # 根据name属性获取标签集合
      举例说明:
      document.getElementById('i1') # 打印标签及内容
      document.getElementById('i1').innerText # 打印标签里的内容
      document.getElementById('i1').innerText = '学员jack' # 修改标签里的内容

      document.getElementsByTagName('a') # 以数组格式返回所有的a标签
      document.getElementsByTagName('a')[1] # 根据索引提取指定的标签
      document.getElementsByTagName('a')[1].innerText # 提取指定标签里的内容
      document.getElementsByTagName('a')[1].innerText = 'test' # 修改标签内容

    2:间接查找
      首先通过直接找定义要查找的标签,然后通过下面的方法进行间接找
        - parentNode 父节点
        - childNodes 所有子节点
        - firstChild 第一个子节点
        - lastChild 最后一个子节点
        - nextSibing 下一个兄弟节点
        - previousSibling 上一个兄弟节点

      以下为重点掌握
        - parentElement 父节点标签元素

        - children 所有子标签
        - firstElementChild 第一个子标签元素
        - lastElementChild 最后一个子标签元素

        - nextElementSibling 下一个兄弟标签元素
        - previousElementSibling 上一个兄弟标签元素
      举例:
      tag = document.getElementById('i2') # 定位标签
      tag.parentNode.previousElementSibling.children[1].innerText # 打印父标签的上一兄弟标签下的子标签索引号为1的内容
    2:操作
      1:文本内容操作
      innerText:可获取标签内的文本,修改也只能是文本
      效果如下:
        <div id='i1'>oldboy <a>google</a></div>
        通过ID查找后使用innerText显示输出如下:
        oldboy google 表示内部的a标签已被忽略
      innerHTML:获取标签内的全部内容,修改可以是标签内容。
      效果如下:
        <div id='i1'>oldboy <a>google</a></div>
        通过ID查找后使用innerText显示输出如下:
        oldboy<a>google</a> 内容和包含的标签全部会打印

      value:可以获取输入框输入的内容,也可以修改
        (input value获取标签内值)
        (select 获取选中的value值),特有的属性:selectedIndex,就是根据索引位置操作值
      textarea value获取其中的值
      checkbox
        checkbox对象.checked 获取值
        checkbox对象.checked = 赋值

    搜索框的示例

    <div style="900px;margin:0 auto;">
        <!-- onfocus光标移入到搜索框 onblur光标移出搜索框-->
        <input id = 'i1' onfocus="Focus();" onblur="Blur();" type="text" value="请输入关键字" />
    </div>
    <script>
        function Focus(){
            var tag = document.getElementById('i1')
            var val = tag.value
            if (val=='请输入关键字'){
                tag.value=''
            }
        }
        function Blur() {
            var tag = document.getElementById('i1')
            var val = tag.value
            if (val.length==0){
                tag.value='请输入关键字'
            }
        }
    </script>
    View Code

    2:样式操作
    <style>
      .c1{....} # 先声明样式名
    </style>
    className # 通过dom实现css样式添加删除
      tag.className = c1 直接整体做操作
    classList
      classList.add
        tag.classList.add('c1') 添加指定样式
      classList.remove
        tag.classList.remove('c1') 删除指定样式

    也可在对象上直接操作设置样式,但是要注意,样式的写法有一点区别,比如直接写style的参数:
    background-color在这里写法是backgroundColor 都要去掉"-"符号,并且是驼峰写法。
    <style>
      .c1{....}
    </style>
    <div id = 'i1' class='c1 c2'></div>
    obj = document.getElementById('i1')
    obj.style.color = 'red' 可以直接设置样式
    obj.style.fontZize = '16px';
    obj.style.backgroundColor = 'red';
    obj.style.color = 'red'

    3:属性操作:操作标签内的某个属性
    obj.setAttribute('键名','键值) --><input name='alex'> 添加
    obj.removeAttribute('value') 删除
    obj.attributes 获取所有属性

    4:标签操作
    创建标签,并添加到html中
    1:以字符串形式
      参数4个:
        - beforeBegin # 标签外部的上面插入
        - afterBegin # 标签外部的下面插入
        - beforeEnd # 标签内部的上面插入
        - afterEnd # 标签内部的下面插入
    2:对象的方式(document.createElement('div'))

    举例如下:

     1 <input type="button" onclick="AddEle1();" value="+">
     2 <input type="button" onclick="AddEle2();" value="+">
     3 <div id="i1">
     4 <input type="text" />
     5 </div>
     6 
     7 <script>
     8     // 第一种方法以字符串:
     9     function AddEle1() {
    10         //创建一个标签,以字符串的方式
    11         //将标签添加到i1里
    12         var tag = '<p><input type="text" /></p>';
    13         //注意:第一个参数有4种:beforeBegin,afterBegin,beforeEnd,afterEnd,4个参数分别是在i1标签外部的
    14         // 上,下,标签内部标签的上,下插入
    15         document.getElementById('i1').insertAdjacentHTML('beforeEnd',tag);
    16         //注意:这里通过insertAdjacentHTML添加的tag是字符串
    17     }
    18     //第二种方法以对象:
    19     function  AddEle2() {
    20         //创建标签,以对象方式
    21         var tag = document.createElement('input'); 创建标签
    22         tag.setAttribute('input','text');       创建属性
    23         tag.style.fontSize ='16px';     创建样式
    24         tag.style.color ='red';
    25         //创建p标签,并将tag添加进来
    26         var p = document.createElement('p')  创建标签
    27         p.appendChild(tag)      添加tag标签为p标签的子标签
    28         document.getElementById('i1').appendChild(p) 添加p标签到id=i1标签的下面
    29         //注意:这里通过appendChild添加的p是对象
    30     }
    31 </script>
    View Code

    提交表单:
    任何标签通过DOM都可提交表单

    举例如下

    1 <form id='f1' action="http://www.baidu.com">
    2 <div onclick="submitForm();">提交</div>
    3 </form>
    4 <script>
    5     function submitForm() {
    6         document.getElementById('f1').submit() 找到id=f1后使用submit方法提交。
    7     }
    8 </script>
    View Code

    其他:

    console.log 终端控制台输出
    alert 页面弹窗
    confirm 页面弹出确认框(确定返回true,取消返回false)
    var v = confirm('真的要删除么')
    URL和刷新
    location.href 获取当前的url
    location.href = 'url' URL进行重定向
    location.reload() 重新加载(页面刷新一下)

    定时器
    var obj = setInterval(function(){},毫秒) 设置定时器,一直执行
    clearInterval(obj) 删除定时器
    var obj = setTimeout(function(){},5000) 设置定时器并只执行一次
    clearTimeout(obj) 删除定时器

    举例:setTimeout定时执行

     1 <div id="status"></div>
     2 <input type="button" value="删除" onclick="deleteEle();" />
     3 <script>
     4     function deleteEle() {
     5         document.getElementById('status').innerText = '已删除';
     6         setTimeout(function () {
     7             document.getElementById('status').innerText = ''
     8         },5000);
     9     }
    10 </script>
    View Code

    举例:模态对话框和 复选框全选反选取消

      1 <head>
      2     <meta charset="UTF-8">
      3     <title>Title</title>
      4     <style>
      5         .hide{
      6             display: none;
      7         }
      8         .c1{
      9             position: fixed;
     10             top:0;
     11             right:0;
     12             bottom:0;
     13             left:0;
     14             background-color:black;
     15             opacity:0.6;
     16             z-index:9;
     17         }
     18         .c2{
     19             width:500px;
     20             height:400px;
     21             background-color:white;
     22             position: fixed;
     23             left:50%;
     24             top:50%;
     25             margin-left:-250px;
     26             margin-top:-200px;
     27             z-index:10;
     28         }
     29     </style>
     30 </head>
     31 <body style="margin: 0;">
     32 <input type="button" value="添加" onclick="showModel();" />
     33 <input type="button" value="全选" onclick="chooseAll();" />
     34 <input type="button" value="取消" onclick="cancleAll();" />
     35 <input type="button" value="反选" onclick="reverseAll();" />
     36 <table>
     37     <thead>
     38         <tr>
     39             <th>请选择</th>
     40             <th>主机名</th>
     41             <th>端口</th>
     42         </tr>
     43     </thead>
     44     <tbody id="tb">
     45         <tr>
     46             <td><input type="checkbox" /></td>
     47             <td>1.1.1.1</td>
     48             <td>80</td>
     49         </tr>
     50         <tr>
     51             <td><input type="checkbox" /></td>
     52             <td>2.2.2.2</td>
     53             <td>22</td>
     54         </tr>
     55     </tbody>
     56 </table>
     57 <!--遮罩层开始-->
     58 <div id='i1' class="c1 hide"></div>
     59 <!--遮罩层结束-->
     60 
     61 <!-- 弹出框开始 -->
     62 <div id='i2' class="c2 hide">
     63     <p><input type="text" /> </p>
     64     <p><input type="text" /> </p>
     65     <p>
     66         <input type="button" value="确定" />
     67         <input type="button" value="取消" onclick="hideModel();" />
     68     </p>
     69 </div>
     70 <!-- 弹出框结束 -->
     71 <script>
     72     function showModel() {
     73         document.getElementById('i1').classList.remove('hide');
     74         document.getElementById('i2').classList.remove('hide')
     75     }
     76     function hideModel() {
     77         document.getElementById('i1').classList.add('hide');
     78         document.getElementById('i2').classList.add('hide')
     79     }
     80     function chooseAll() {
     81         var tbody = document.getElementById('tb');
     82         // 获取所有的tr
     83         var tr_list = tbody.children;
     84         for(var i=0;i<tr_list.length;i++){
     85             //循环所有的tr
     86             var current_tr = tr_list[i];
     87             //第一个children是tr下所有的td ,第二个children是td下所有的input
     88             var checkbox = current_tr.children[0].children[0];
     89             checkbox.checked = true
     90         }
     91     }
     92     function cancleAll() {
     93         var tbody = document.getElementById('tb');
     94         var tr_list = tbody.children;
     95         for(var i=0;i<tr_list.length;i++){
     96             var current_tr = tr_list[i];
     97             var checkbox = current_tr.children[0].children[0];
     98             checkbox.checked = false;
     99         }
    100     }
    101     function reverseAll() {
    102         var tbody = document.getElementById('tb');
    103         var tr_list = tbody.children;
    104         for(var i=0;i<tr_list.length;i++){
    105             var current_tr = tr_list[i];
    106             var checkbox = current_tr.children[0].children[0];
    107             if(checkbox.checked == true){
    108                 checkbox.checked = false;
    109             }else{
    110                 checkbox.checked = true;
    111             }
    112         }
    113 
    114     }
    115 </script>
    View Code

    举例:后台管理左侧菜单

     1 <head>
     2     <meta charset="UTF-8">
     3     <title>Title</title>
     4     <style>
     5         .hide{
     6             display: none;
     7         }
     8         .item .header{
     9             height:35px;
    10             background-color:blue;
    11             color: white;
    12             line-height:35px;
    13         }
    14     </style>
    15 </head>
    16 <body>
    17 <div style="height:48px;"></div>
    18 <div style=" 300px;">
    19     <div class="item">
    20         <div id='i1' class="header" onclick="changeMenu('i1');">菜单一</div>
    21         <div class="content hide">
    22             <div>内容一</div>
    23             <div>内容二</div>
    24             <div>内容三</div>
    25         </div>
    26     </div>
    27     <div class="item">
    28         <div id='i2' class="header" onclick="changeMenu('i2');">菜单二</div>
    29         <div class="content hide">
    30             <div>内容一</div>
    31             <div>内容二</div>
    32             <div>内容三</div>
    33         </div>
    34     </div>
    35     <div class="item">
    36         <div id='i3' class="header" onclick="changeMenu('i3');">菜单三</div>
    37         <div class="content hide">
    38             <div>内容一</div>
    39             <div>内容二</div>
    40             <div>内容三</div>
    41         </div>
    42     </div>
    43 </div>
    44 <script>
    45     function changeMenu(nid) {
    46         var current_header = document.getElementById(nid);
    47         var item_list = current_header.parentElement.parentElement.children;
    48         for(var i=0;i<item_list.length;i++){
    49             var current_item = item_list[i]
    50             current_item.children[1].classList.add('hide');
    51         }
    52         current_header.nextElementSibling.classList.remove('hide');
    53     }
    54 </script>
    View Code

    举例:循环给所有的a标签赋值

      n1 = document.getElementsByTagName('a')
      for (var i=0;i<n1.length;i++){
      n1[i].innerText = 777
      }

    5:事件:
    所有的事件如下:

    以下为常用事件
      onclick(单击) , onblur(光标移出), onfocus(光标移入),onmouseover(鼠标指向),onmouseout(鼠标移出)
      行为:js    样式:css    结构:html

    绑定事件2个方式:
    1:直接标签绑定 onclick='xxx()'
    2:先获取dom对象,然后进行绑定:

      document.getElementById('xx').onclick
      document.getElementById('xx').onfocus
      this:当前触发事件的标签,传入分2种方法:
      1:第一种绑定方式以及this的使用,这里this就代表当前标签
        <input type=button' onclick='checkon(this)'>
        function checkon(ths){ ths 当前点击的标签}
      2:第二种绑定方式
      <input id='i1' type='button'>
      document.getElementById('i1').onclick = function(){
      this #这里的this待指当前点击的标签
      }

    典型的作用域示例:

     1 <body>
     2     <table border="1">
     3         <tr><td>1</td><td>2</td></tr>
     4         <tr><td>1</td><td>2</td></tr>
     5         <tr><td>1</td><td>2</td></tr>
     6     </table>
     7     <script>
     8 var myTrs = document.getElementsByTagName('tr'); #获取所有tr标签属组
     9 var len = myTrs.length;  # 显示长度
    10 for (var i=0;i<len;i++){  #循环每一行tr数据
    11     // i=0,1,2
    12     myTrs[i].onmouseover = function(){  #鼠标指向当前tr后执行函数设置背景色为red
    13         this.style.backgroundColor = 'red';  #鼠标指向哪个标签,这个this就代表当前指向的标签
    14         };
    15     myTrs[i].onmouseout = function(){  #鼠标指向当前tr后执行函数设置背景色为red
    16         this.style.backgroundColor = '';  #鼠标指向哪个标签,这个this就代表当前指向的标签
    17         };
    18     }
    19 }
    20 </script>
    View Code

    3:第三种绑定方式,可以实现2个onclick事件同时执行。
    如下:

     1 var mydiv = document.getElementById('test')
     2 /*
     3 mydiv.onclick = function () {
     4     console.log('abc')
     5 }
     6 mydiv.onclick = function(){
     7     console.log('456')
     8 } 同时实现如上的2个onclick功能
     9 */
    10 var mydiv = document.getElementById('test')
    11 mydiv.addEventListener('click',function () {console.log('aaa'),false})
    12 mydiv.addEventListener('click',function () {console.log('bbb'),false})
    13 以上这个方式就实现了2个onclick的同时输出
    View Code

    捕捉和冒泡:

    以下关于上面实例第三个参数true/false冒泡举例:

     1 <div id="main">
     2     <div id="content"></div>
     3 </div>
     4 <script>
     5 var mymain = document.getElementById('main')
     6 var mycontent = document.getElementById('content')
     7 mymain.addEventListener('click',function () {console.log('main'),false})
     8 mycontent.addEventListener('click',function () {console.log('content'),false})
     9 </script>
    10 输出:当都为false时,输出为content , main 。当都为true时,输出为main,content
    View Code

    词法分析:
    function t1(age){       # 形参
      console.log(age);    #输出: function()
      var age = 27;     # 局部变量
      console.log(age);    #输出: 27
      function age(){}    # 函数声明表达式,优先级高 ,这里执行时候没有调用
      console.log(age);   #输出 27
      }
    t1(3);

    以上实例分析过程:
    active object ==> AO
    1:形式参数
    AO.age = undefined
    AO.age = 3
    2:局部变量,只发现有个var age变量,但不会赋值。
    AO.age = undefained
    3:函数声明表达式,优先级最高,会覆盖前2项出现的值
    AO.age = function()

  • 相关阅读:
    Java NIO学习笔记---I/O与NIO概述
    JAVA多线程和并发基础面试问答
    Java线程面试题 Top 50
    Java并发编程:Timer和TimerTask
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    Java并发编程:线程池的使用
    Java并发编程:阻塞队列
    程序猿写客户端,没有视觉设计师,怎么搞到图?
    hm nsis edit请求的操作需要提升
    MFC修改系统托盘的图标
  • 原文地址:https://www.cnblogs.com/zy6103/p/7326737.html
Copyright © 2020-2023  润新知