详解js的事件处理函数和动态创建html标记方法


Posted in Javascript onDecember 16, 2016

1 HTML的事件属性

全局事件属性:HTML 4 增加了使事件在浏览器中触发动作的能力,比如当用户点击元素时启动 JavaScript。

  a. Window 事件属性,针对 window 对象触发的事件(应用到 <body> 标签),常用的为onload。

  b. Form事件,由 HTML 表单内的动作触发的事件(应用到几乎所有 HTML 元素,但最常用在 form 元素中):常用的为onblur、onfocus、onselect、onsubmit。

  c. keybord事件

  d.Mouse事件,由鼠标或类似用户动作触发的事件:常用的为onclick、onmouseover、onmouseout。

  e. Media事件,由媒介(比如视频、图像和音频)触发的事件(适用于所有 HTML 元素,但常见于媒介元素中,比如 <audio>、<embed>、<img>、<object> 以及     <video>)。

2  事件处理函数

文档的结构与文档的行为混杂在一起,例如:

<a href="images/example.jpg" onclick="showPic(this);return false;">

文档的结构与文档的行为分开,例如:

element.onclick = function() { showPic(whichpic); return false; }

3 共享onload事件

页面加载之后立即执行一段 JavaScript:<element onload="script">,如果想让页面加载后执行多个脚本呢?办法是:

window.onload = function() {
 script1;
 script2;
 script3;
 ......
 }

但是这个办法没有弹性,如果需要加载的脚本不断变化,那么代码也要跟着变化,更好的办法是:

function addLoadEvent(func)() {
 var oldonload = window.onload;
 if (typeof window.onload !="function") {
  window.onload = func;
 } else {
  window.onload = function() {
   oldonload();
   func;
  }
 }
 }

4 动态创建html标记

  a. 两个传统的方法

    document.write方法和innerHTML属性,两者都不是标准化的DOM(W3C标准)所支持的方法和属性,它们都是html的专有属性。

    document.write方法可以很方便的插入元素标签,尤其是字符串。但是它与网页设计应将行为(脚本)和结构(html标签)分离的原则相背。

<!DOCTYPE html>
 <html>
 <head>
 <meta chaset="utf-8" />
 <title>document.write</title>
 <body>
  <script>
  <!--可以很方便的插入元素标签,尤其是字符串.但是它与网页设计应将行为(脚本)和结构(html标签)分离的原则-->
  document.write("<p>This is inserted by document.write</p>");
  </script>
 </body>
 </head>
 </html>

innerHTML适合将一大段HTML内容插入网页,如:

<div id="testdiv">
 </div>
 window.onload = function() {
 var testdiv = document.getElementById("testdiv");
 testdiv.innerHTML = "<p>This is inserted by <em>innerHTML</em></p><en>";
 }

  b. 更加精细化的dom方法-获取dom节点树和改变dom节点树

    检索节点(元素):document.getElementById和element.getElementsByTagName
   
    创建节点(元素):document.createElement,document.createTextNode
   
    追加节点(元素):element.appendChild

    插入(将一个节点插入到另一个节点之前):parentEelement.insertBefore(newElement, targetElement)

    很有用的属性:element.parentNode(获取父节点)、element.nextSibling(获取兄弟节点)

    上面用innerHTML属性插入HTML的效果用dom方法照样可以实现:

window.onload = function() {
  var testdiv = document.getElementById("testdiv");
  var para = document.createElement("p");
  testdiv.appendChild(para);
  var context1 = doument.createTextNode("This is inserted by ");
  para.appendChild(context1);
  var emphasis = document.createElement("em");
  para.appendChild(emphasis);
  var context2 = document.createTextNode("method of domcore");
  emphasis.appendChild(context2);
 }

利用上面的dom方法写一个将一个节点插入到另一个节点之后的函数:

function insertAfter(newElement, targetElement) {
 var parent = targetElement.parentNode;
 if (parent.lastChild == targetElement) {
  parent.appendChild(newElement);
 } else {
  targetElement.inserBefore(newElement, targetElement.nextSibling);
 }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
asp.net 30分钟掌握无刷新 Repeater
Sep 16 Javascript
关于JS管理作用域的问题
Apr 10 Javascript
javascript 数组操作详解
Jan 29 Javascript
video.js使用改变ui过程
Mar 05 Javascript
JavaScript订单操作小程序完整版
Jun 23 Javascript
解决node修改后需频繁手动重启的问题
May 13 Javascript
如何理解Vue的v-model指令的使用方法
Jul 19 Javascript
vue返回上一页面时回到原先滚动的位置的方法
Dec 20 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
Aug 05 Javascript
基于Node的Axure文件在线预览的实现代码
Aug 28 Javascript
vue中移动端调取本地的复制的文本方式
Jul 18 Javascript
Antd的table组件表格的序号自增操作
Oct 27 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
Dec 16 #Javascript
JS限制条件补全问题实例分析
Dec 16 #Javascript
Node.js用readline模块实现输入输出
Dec 16 #Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 #Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 #Javascript
概述jQuery中的ajax方法
Dec 16 #Javascript
JS数组排序方法实例分析
Dec 16 #Javascript
You might like
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
PHP 分页类(模仿google)-面试题目解答
2009/09/13 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
python实现员工管理系统
2018/01/11 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
django项目搭建与Session使用详解
2018/10/10 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
Python zip函数打包元素实例解析
2019/12/11 Python
Python netmiko模块的使用
2020/02/14 Python
Python接口测试文件上传实例解析
2020/05/22 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
JPA的优势都有哪些
2013/07/04 面试题
2015年度培训工作总结范文
2015/04/02 职场文书
酒店前台岗位职责
2015/04/16 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript