一. 事件委托

事件委托就是利用冒泡的原理,把事件加到父级上,来代替子集执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。

比如有20个<li>,并且在每个li中都绑定事件的话很麻烦,可以把事件绑定在li的父级<ul>上

例子1,实现效果是点击每一个li,弹出相应的文本内容,就是1,2,3...8

方法一:对每一个li都绑定事件,但这样性能不高

$('.list li').click(function(){
    alert($(this).html());
})
 
方法二:用事件委托的方式
 
$('.list').delegate('selector', 'eventType', function(event) {
    selector
});
 
 
完成代码如下
 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>事件委托</title>
  6. <style type="text/css">
  7. .list{
  8. list-style:none;
  9. }
  10.  
  11. .list li{
  12. height:30px;
  13. background-color:green;
  14. margin-bottom:10px;
  15. color:#fff;
  16. }
  17.  
  18. </style>
  19. <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
  20. <script type="text/javascript">
  21. $(function(){
  22.  
  23. /*$('.list li').click(function(){
  24. alert($(this).html());
  25. })
  26. */
  27. /* 事件委托的写法 */
  28.  
  29. $('.list').delegate('li', 'click', function() { //li是ul下的所有元素,如果有多个元素可用空格分开;click是事件类型,
  30. alert($(this).html());
  31.  
  32. //取消委托
  33. //$('.list').undelegate();
  34.  
  35. });
  36.  
  37. })
  38.  
  39. </script>
  40. </head>
  41. <body>
  42. <ul class="list">
  43. <li>1</li>
  44. <li>2</li>
  45. <li>3</li>
  46. <li>4</li>
  47. <li>5</li>
  48. <li>6</li>
  49. <li>7</li>
  50. <li>8</li>
  51. </ul>
  52. </body>
  53. </html>

  

二. 节点操作

1. 创建节点

$('<span>span元素</span>

这样就创建了一个节点,可把它赋给一个变量。

2. 插入节点,

append()就是正常的在后面附加节点元素;而appendTo()是把附加元素和被附加元素反着写

prepend()和prependTo():在现存元素内部,从前面插入元素节点

after()和insertAfter():从现存元素的外部,从后面插入元素

before()和insertBefore():从现存元素的外部,从前面插入元素;insertBefore() 比较好理解,2个效果一样

3. 删除节点元素

$('#div1').remove();

代码实例如下

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>节点操作</title>
  6. <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
  7. <script type="text/javascript">
  8. $(function(){
  9.  
  10. var $span = $('<span>span元素</span>');
  11. var $p = $('<p>p段落元素</p>');
  12.  
  13. var $h = $('<h1>页面标题</h1>');
  14.  
  15. /*
  16.  
  17. $('#div1').append($span);
  18. $('#div1').append($p);
  19.  
  20. */
  21.  
  22. $span.appendTo('#div1');
  23. $p.appendTo('#div1');
  24.  
  25. //$('#div1').before($h); 效果就是<h1>放在了<div1>的前面
  26.  
  27. $h.insertBefore('#div1');
  28.  
  29. $p.remove();
  30.  
  31. })
  32. </script>
  33. </head>
  34. <body>
  35. <div id="div1"></div>
  36. </body>
  37. </html>

  

三. todolist计划列表实例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>todolist</title>
  6. <style type="text/css">
  7. .list_con{
  8. width:400px;
  9. margin:50px auto 0;
  10. }
  11.  
  12. .inputtxt{
  13. width:350px;
  14. height:30px;
  15. border:1px solid #ccc;
  16. padding:0px;
  17. text-indent:10px;
  18.  
  19. }
  20.  
  21. .inputbtn{
  22. width:40px;
  23. height:32px;
  24. padding:0px;
  25. border:1px solid #ccc;
  26. }
  27.  
  28. .list{
  29. margin:0;
  30. padding:0;
  31. list-style:none;
  32. margin-top:20px;
  33. }
  34.  
  35. .list li{
  36. height:30px;
  37. line-height:30px;
  38. border-bottom:1px solid #ccc;
  39. }
  40.  
  41. .list li span{
  42. float:left;
  43. }
  44.  
  45. .list li a{
  46. float:right;
  47. text-decoration:none;
  48. margin:0 10px;
  49. }
  50. </style>
  51. <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
  52. <script type="text/javascript">
  53. $(function(){
  54.  
  55. $('#btn1').click(function(){
  56.  
  57. var txt = $('#txt1').val();
  58. $('#txt1').val('');
  59.  
  60. if(txt==''){
  61. alert('请输入内容!');
  62. return;
  63. }
  64.  
  65. $li = $('<li><span>'+ txt +'</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li>');
  66.  
  67. $li.appendTo('#list');
  68.  
  69. });
  70.  
  71. /*
  72.  
  73. $('.del').click(function() {
  74. $(this).parent().remove();
  75. });
  76.  
  77. */
  78.  
  79. $('#list').delegate('a', 'click', function() {
  80.  
  81. var handler = $(this).attr('class');
  82.  
  83. if(handler=='del'){
  84. $(this).parent().remove();
  85. }
  86.  
  87. if(handler=='up'){
  88.  
  89. if($(this).parent().prev().length==0)
  90. {
  91. alert('到顶了!');
  92. return;
  93. }
  94.  
  95. $(this).parent().insertBefore($(this).parent().prev());
  96. }
  97.  
  98. if(handler=='down'){
  99.  
  100. if($(this).parent().next().length==0)
  101. {
  102. alert('到底了!');
  103. return;
  104. }
  105.  
  106. $(this).parent().insertAfter($(this).parent().next());
  107. }
  108.  
  109. });
  110.  
  111. })
  112.  
  113. </script>
  114. </head>
  115. <body>
  116.  
  117. <div class="list_con">
  118. <h2>To do list</h2>
  119. <input type="text" name="" id="txt1" class="inputtxt">
  120. <input type="button" name="" value="增加" id="btn1" class="inputbtn">
  121.  
  122. <ul id="list" class="list">
  123.  
  124. <li><span>学习html</span><a href="javascript:;" class="up"></a><a href="javascript:;" class="down"></a><a href="javascript:;" class="del">删除</a></li>
  125. <li><span>学习css</span><a href="javascript:;" class="up"></a><a href="javascript:;" class="down"></a><a href="javascript:;" class="del">删除</a></li>
  126. <li><span>学习javascript</span><a href="javascript:;" class="up"></a><a href="javascript:;" class="down"></a><a href="javascript:;" class="del">删除</a></li>
  127.  
  128. </ul>
  129.  
  130. </div>
  131. </body>
  132. </html>

  

事件委托,元素节点操作,todolist计划列表实例的更多相关文章

  1. 事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流

    一.事件冒泡定义 事件冒泡是指在一个对象触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那 ...

  2. jquery元素节点操作

    jquery元素节点操作 创建节点 var $div = $('<div>'); var $div2 = $('<div>这是一个div元素</div>'); 插入 ...

  3. 获取元素节点 & 操作属性节点

    1.html 文档编写 js 代码的位置: window.onload事件在整个html文档被完全加载完再执行,    所以可以获取html文档的任何节点 js-window-onload.html ...

  4. jquery——元素节点操作

    插入节点: 1.append()和appendTo():在现存元素的内部,从后面插入元素 <script type="text/javascript"> $(funct ...

  5. 14-jquery元素节点操作

    **创建节点** ```var Div = $('<div>');var Div2 = $('<div>这是一个div元素</div>');``` **插入节点** ...

  6. 事件冒泡及事件委托的理解(JQuery Dom操作)

    jQuery事件冒泡: click mouseenter 等事件没有绑定 也会触发,只是触发后没有任何结果 子元素触发事件后,会把触发事件传递给父元素,那么父元素也会被触发. 不管有没有绑定事件,都会 ...

  7. 6、前端--DOM操作(查找标签、节点操作、获取值操作、class操作、样式操作、绑定事件、内置参数this)

    DOM操作之查找标签 前缀关键字>>>:document # 基本查找(核心) document.getElementById 根据ID获取一个标签 document.getElem ...

  8. javascript事件委托和jquery事件委托

    元旦过后,新年第一篇. 初衷:很多的面试都会涉及到事件委托,前前后后也看过好多博文,写的都很不错,写的各有千秋,自己思前想后,为了以后自己的查看,也同时为现在找工作的前端小伙伴提供一个看似更全方位的解 ...

  9. 怎样通过CSS选择器获取元素节点或元素节点集合

    使用 document.querySelector() 和 document.querySelectorAll(), 将 CSS选择器 作为参数传入即可. // 标签选择器 document.quer ...

随机推荐

  1. 词法解析 用reactjs和bootstrap创建页面IDE

  2. python 字符编码处理问题总结

    Python中常常遇到这种字符编码问题,尤其在处理网页源代码时(特别是爬虫中): UnicodeDecodeError: ‘XXX' codec can't decode bytes in posit ...

  3. Python3 模块与包

    一.模块介绍 什么是模块? 常见的场景:一个模块就是一个包含了一组功能的Python文件,比如spam.py,模块名为spam,可以通过import spam使用. 在Python中,模块的使用方式都 ...

  4. 每天一个Qt类之QWidget

    每天一个Qt类之QWidget QWidget类是所有用户界面对象的基类 继承QObject和QPaintDevice 被QButton.QFrame.QDialog.QComboBox.QDataB ...

  5. arping

    强制交换机刷新MAC arping -I em2(网卡名称) 58.215.88.8(Vip)

  6. SpringMVC 2.5.6 +Hibernate 3.2.0

    spring MVC配置详解 现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时 ...

  7. ubuntu 16.04启用root和ssh登录

    1.设置用户密码 sudo passwd root 2.vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 末尾添加:greeter-show-m ...

  8. HDU 6097 Mindis (计算几何)

    题意:给一个圆C和圆心O,P.Q是圆上或圆内到圆心距离相等的两个点,在圆上取一点D,求|PD| + |QD|的最小值 析:首先这个题是可以用三分过的,不过也太,.... 官方题解: 很不幸不总是中垂线 ...

  9. 编写高质量代码改善C#程序的157个建议——建议81:使用Parallel简化同步状态下Task的使用

    建议81:使用Parallel简化同步状态下Task的使用 在命名空间System.Threading.Tasks中,有一个静态类Parallel简化了在同步状态下的Task的操作.Parallel主 ...

  10. 关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题

    DBML: [Function(Name="dbo.p_GetStudyStageSubjectGroup")] public ISingleResult<STUDYSTAG ...