详解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 相关文章推荐
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
Aug 18 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
Sep 22 Javascript
js控制网页背景音乐播放与停止的方法
Feb 06 Javascript
每天一篇javascript学习小结(Array数组)
Nov 11 Javascript
微信小程序 图片绝对定位(背景图片)
Apr 05 Javascript
React Native验证码倒计时工具类分享
Oct 24 Javascript
微信小程序实现tab和swiper切换结合效果
Jul 17 Javascript
Vue项目组件化工程开发实践方案
Jan 09 Javascript
vue2 设置router-view默认路径的实例
Sep 20 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
Oct 12 Javascript
如何用Node.js编写内存效率高的应用程序
Apr 30 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
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
Python内置数据类型详解
2014/08/18 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
python 多线程串行和并行的实例
2019/02/22 Python
在python中使用nohup命令说明
2020/04/16 Python
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
个人简历自我鉴定
2013/10/11 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
大学社团计划书
2014/05/01 职场文书
教研处工作方案
2014/05/26 职场文书
应急管理培训方案
2014/06/12 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
房地产项目合作意向书
2015/05/08 职场文书
婚宴父亲致辞
2015/07/27 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
Nebula Graph解决风控业务实践
2022/03/31 MySQL