JavaScript DOM

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript DOM相关的知识,希望对你有一定的参考价值。

JavaScript DOM:JavaScript Document Object Model :动态操作页面的元素

平常做的网页中,一些动态效果,页面无刷新动态效果,单纯用css是比较难以实现的,这时,借助javascript DOM来操作网页页面的元素,使网页变得更加丰富多彩。

 

1、window.onload(页面加载完成触发事件)

      js文件从外边引入,或者一般如果写在head标签中,当网页加载的时候,代码从上往下依次执行,js代码也如此,当没执行到body的时候,网页上元素的标签尚未存在,如果这时候去提前操作这些标签,显然,会出错误的,

这时候,需要使用window.onload()事件,当页面加载完成的时候触发的事件,就不会出现这样的问题。

window.onload=function(){alert(‘页面加载完成‘);};


//页面触发事件:

//(1)onload (页面加载后触发)
    
//(2)onunload(页面卸载后触发)   -->只支持IE
    
//(3)onbeforeunload (页面卸载前触发)

 

2、获取页面上的元素的方法:

  (1)通过ID获取页面中的元素

document.getElementById(‘id‘).onclick=function(){alert(‘id的点击事件‘)}

 

  (2)根据标签名称获取页面上所有的标签,返回一个集合

var pElement=doucment.getElementByTagName(‘p‘);//获取页面上所有的p标签,返回一个集合

 

  (3)根据元素的name来获取元素,返回一个集合

var nameElement=document.getElementByName(‘name‘);  //获取页面上所有name属性等于name的元素

 

 

3、计时器的使用 setInterval(常用)

    var IntervarId=setInterval(function(){alert(‘执行的代码,一般用匿名函数‘)},1000);   //每隔1秒进行一次
    
    //停止  需要停止就要获取所在的id(可以对setTimeout进行停止)
    clearInterval(IntervarId);
    
    //超出规定时间,执行一次代码:
    setTimeout(function(){alert(‘执行的代码‘);},2000);             //超过2秒后执行一次代码(就一次)

 

 

4、事件的对象

  由于不同浏览器之间,有很多不同,浏览器存在一些兼容问题,不同用户使用的浏览器更是多种多样,不过一般兼容IE和火狐,基本就兼容所有浏览器(后面的jQuery可以解决这个问题,基本不会考虑浏览器兼容问题)

  (1)IE支持的获取方法

window.event.

  (2)火狐支持的获取方法

    function(evt)={
        evt.
    };

-->(3)兼容代码:

        function(evt)={
            var e=window.event||evt;
            e.……
        };

 

  (4)获取最初引发事件对象(兼容代码)

        var e=window.event ||evt;
        var srcTarget=e.scrElement||e.target

//在事件处理程序中,当前事件是哪个元素的事件,那么this表示就是哪个对象, window.event.srcElement同样

//区别: this 表示当前事件的对象,window.event.srcElement表示最初引发事件的对象

 

 

5、事件冒泡

理解:如果一个p在一个div中,当p标签事件执行完毕,就会触发div标签的事件执行,一层一层的向外触发(一层一层的包含)

阻止事件冒泡(兼容代码):

var e=window.event||evt;     
 e.cancelBubble=true;

 

 

6、坐标属性(▲常用)

    //相对于当前页面左上角的偏移坐标
        var x = e.clientX;
         var y = e.clientY;
        
    //相对于屏幕左上角的偏移坐标
         var x = e.screenX;
         var y = e.screenY;
         
    //相对于元素自己的偏移坐标
        var x = e.offsetX;
        var y = e.offsetY;

 

 

7.1、动态创建元素:

  (1)创建一个超链接:

    var aLink=document.createElement(‘a‘);          //‘a‘为html标签名称,其他同理
    aLink.href=‘http://www.baidu.com‘;
    aLink.title=‘百度一下,你就知道‘;
    aLink.target=‘_blank‘;

 

  (2)文本框的创建

var txtBox=document.createElement(‘input‘);           txtBox.type=‘text‘;

//根据type属性来创建input标签的其他类型

 

  (3)表格的创建

var dTable=document.createElement(‘table‘);  //创建一个表格
    
    //遍历数据,创建行
    for(var key in data)
    {
        // var dTr=document.createElement(‘tr‘);    //创建行对象
        
        // var td1=document.createElement(‘td‘);   //创建列
        
        // dTr.appendChild(td1);                    //把列加入行中
        
        // dTable.appendChild(dTr);                 //把行加入表格中    
        
    //推荐使用的方法:兼容所有浏览器
    
        var dRow=dTable.insertRow(-1);              //向表格中插入一行,-1为索引,追加到最后一行
        dRow.insertCell(-1).innerHTML=key;          //向行中插入单元格,追加到最后
        dRow.insertCell(-1).innerHTML=data[key];    
    }

 

 

7.2删除层中的元素

  (1)方法一:彻底删除

    var divObject=document.getElementById(‘div1‘);     //获取层
    
    while(divObject.firstChild)          //如果层中什么都没有,将返回一个undefined,有即返回第一个子元素
    {    
        divObject.removeChild(divObject.firstChild);    //把第一个子元素删除,后面第二个子元素就变成了第一个,以此类推,依次清空
    }

 

  (2)方法二:简单删除

    divObject.innerHTML=‘‘;                //简单可以删除,复杂(比如关联事件等)删除不彻底

 

 

8、JS操作样式:

  (1)设置层的样式:

 xxx.style.backgroundColor=‘xx‘;             //精髓:去掉横杠,首字母大写
    
xxx.style.cssFloat=‘right‘                  //设置右浮动
    
style.overflow=hidden;                      //设置隐藏

 

  (2)动态应用样式:

document.getElementById(‘div1‘).className=‘样式类名‘; 

 

 

9、JS操作表单:

  (1)手动获取表单提交按钮:

document.getElementById(‘btn‘).click=function(){};

 

  (2)调用表单的submit方法来提交:

document.getElementById(‘from1‘).submit();

 

  (3)为表单注册一个提交事件,提交的时候触发:

document.getElementById(‘from1‘).onsubmit=function(){ alert(‘表单提交事件‘)};

 

  PS: 如果使用表单按钮来提交表单(1),则会触发onsubmit事件,如果使用submit方法来提交(2),则不会触发onsubmit事件

 

 

10、JS中使用正则表达式:

  (1)正则表达式的使用:

var email=/^\[email protected]\w+(\.\w)+$/                  //创建一个正则表达式:/^正则表达式$/
//调用正则表达式对象的test()方法,测试是否匹配,返回true或者false
var bool= email.test(string); 

 

  (2)exec方法:

  var xx=/\d+/g;        xx.exec(string)     //使用exec()方法对字符串提取
        
//当正则表达式后面加g(全局模式),反复调用exec()方法,提取每个字符(不使用则都是匹配第一个)

  var result=xx.exec(string);
while(result) { alert(result); result=xx.exec(string); //遍历下一个,当遍历完则判断为false }

 

  (3)字符串的math方法(方便快捷)

    var result=string.match(/\d+/g);             //正则使用全局模式  遍历输出

 

  (4)字符串的replace方法替换

    var result=string.replace(/\正则表达式/g,‘替换的字符‘)

 

11、总结:

  JavaScript DOM中,有许多方法和用法,也存在很多的浏览器兼容问题,要用到浏览器的能力检测去解决。jQuery会解决这些兼容问题。

 




以上是关于JavaScript DOM的主要内容,如果未能解决你的问题,请参考以下文章

更改页面javascript代码(TamperMonkey)以将键盘笔触发送到父DOM

保留对附加节点 javascript 的引用

JavaScript--更新DOM

jquery 对象的 heightinnerHeightouterHeight 的区别以及DOM 元素的 clientHeightoffsetHeightscrollHeightoffset(代码片段

jQuery的DOM操作

VSCode自定义代码片段12——JavaScript的Promise对象