一. 事件委托

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

比如有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
});
 
 
完成代码如下
 
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件委托</title>
<style type="text/css">
.list{
list-style:none;
} .list li{
height:30px;
background-color:green;
margin-bottom:10px;
color:#fff;
} </style>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(function(){ /*$('.list li').click(function(){
alert($(this).html());
})
*/
/* 事件委托的写法 */ $('.list').delegate('li', 'click', function() { //li是ul下的所有元素,如果有多个元素可用空格分开;click是事件类型,
alert($(this).html()); //取消委托
//$('.list').undelegate(); }); }) </script>
</head>
<body>
<ul class="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
</ul>
</body>
</html>

  

二. 节点操作

1. 创建节点

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

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

2. 插入节点,

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

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

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

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

3. 删除节点元素

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

代码实例如下

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>节点操作</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(function(){ var $span = $('<span>span元素</span>');
var $p = $('<p>p段落元素</p>'); var $h = $('<h1>页面标题</h1>'); /* $('#div1').append($span);
$('#div1').append($p); */ $span.appendTo('#div1');
$p.appendTo('#div1'); //$('#div1').before($h); 效果就是<h1>放在了<div1>的前面 $h.insertBefore('#div1'); $p.remove(); })
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>

  

三. todolist计划列表实例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>todolist</title>
<style type="text/css">
.list_con{
width:400px;
margin:50px auto 0;
} .inputtxt{
width:350px;
height:30px;
border:1px solid #ccc;
padding:0px;
text-indent:10px; } .inputbtn{
width:40px;
height:32px;
padding:0px;
border:1px solid #ccc;
} .list{
margin:0;
padding:0;
list-style:none;
margin-top:20px;
} .list li{
height:30px;
line-height:30px;
border-bottom:1px solid #ccc;
} .list li span{
float:left;
} .list li a{
float:right;
text-decoration:none;
margin:0 10px;
}
</style>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(function(){ $('#btn1').click(function(){ var txt = $('#txt1').val();
$('#txt1').val(''); if(txt==''){
alert('请输入内容!');
return;
} $li = $('<li><span>'+ txt +'</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li>'); $li.appendTo('#list'); }); /* $('.del').click(function() {
$(this).parent().remove();
}); */ $('#list').delegate('a', 'click', function() { var handler = $(this).attr('class'); if(handler=='del'){
$(this).parent().remove();
} if(handler=='up'){ if($(this).parent().prev().length==0)
{
alert('到顶了!');
return;
} $(this).parent().insertBefore($(this).parent().prev());
} if(handler=='down'){ if($(this).parent().next().length==0)
{
alert('到底了!');
return;
} $(this).parent().insertAfter($(this).parent().next());
} }); }) </script>
</head>
<body> <div class="list_con">
<h2>To do list</h2>
<input type="text" name="" id="txt1" class="inputtxt">
<input type="button" name="" value="增加" id="btn1" class="inputbtn"> <ul id="list" class="list"> <li><span>学习html</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li>
<li><span>学习css</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li>
<li><span>学习javascript</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li> </ul> </div>
</body>
</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. Nginx源码完全注释(7)ngx_palloc.h/ngx_palloc.c

    ngx_palloc.h /* * NGX_MAX_ALLOC_FROM_POOL should be (ngx_pagesize - 1), i.e. 4095 on x86. * On Windo ...

  2. c/c++中关于String类型的思考

    首先说明:String并不是一种内置类型,因此任何通过String声明出来的实例都不是一个变量,不同于内置类型因此String仅仅能称之为一种特殊的型别,没错String是一个类类型. 一般来说c语言 ...

  3. 用 python 实现各种排序算法-乾颐堂

    总结了一下常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成 ...

  4. [Email] 收发邮件的协议 : IMAP and SMTP , POP3 and SMTP

    支持 IMAP 和 SMTP 的应用 与仅同步收件箱的 POP 不同,IMAP 同步所有电子邮件文件夹. 在电子邮件应用中使用以下设置. 接收 (IMAP) 服务器 服务器地址:imap-mail.o ...

  5. vscode安装dlv插件报错:There is no tracking information for the current branch.

    vscode安装dlv插件报错:There is no tracking information for the current branch. https://blog.csdn.net/a7859 ...

  6. explain分析sql效率

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优 ...

  7. jQuary总结1:jQuary的优点和地位

    1 什么是jQuery? jQuery是一个快速,小巧,功能丰富的JavaScript库. javascript库: 就是存放javascript代码的仓库 jQuery作为一个迭代多年的优秀框架,是 ...

  8. javascrip总结42:属性操作案例: 点击盒子,改变盒子的位置和背景颜色

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  9. JS各种情况处理

    1.获取URL及其参数 实例:URL:file:///C:/Program%20Files/nodejs/test/jumbTarget.html?a=1&&b=2&& ...

  10. 设计模式15:Interpreter 解释器模式(行为型模式)

    Interpreter 解释器模式(行为型模式) 动机(Motivation) 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变 ...