JavaScript学习—jquery的bind-live-delegate区别

本文详细介绍了事件冒泡的概念及其在DOM树中的传播方式,并对比了jQuery中.bind(), .live() 和 .delegate() 函数的特点及应用场景,通过实例说明了不同事件绑定方法的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.youkuaiyun.com/barrettoshen/article/details/7692307

一、 事件冒泡(也称作事件传递)

点击一个链接,触发绑定在链接元素上的click事件,触发绑定到这个元素的click事件的函数。然后,这个 click 事件会从DOM树向上传递,传播到父元素,然后传递给每一个祖先元素。在DOM树中,document 是根节点。


二、 Jquery的.bind()函数

$('a').bind('click',function() { alert("That tickles!") });

JQuery的CSS选择器找到所有元素类型是‘a’的DOM对象,然后给匹配对象的 click 事件绑定处理函数。

$('a').unbind('click');

解除click事件绑定的函数。

.bind()函数使用缺陷:

1. 无法绑定处理函数到还不存在DOM元素的事件。使用$(‘a’).bind(…),之后JavaScript脚本给页面新增DOM元素,新添加元素click事件不会绑定处理函数。

2. .bind()绑定处理函数到多个元素,性能不佳,需要每个元素单独绑定。无法绑定一个父元素监听所有后代(子)元素(不用绑定100个相同的处理函数到单独的元素)。

三、 Jquery的.live()函数

$('a').live('click',function() { alert("That tickles!") });

.live()函数绑定处理函数到$(document)元素(DOM的根元素),并把事件‘click’和元素类型‘a’作为函数的参数。若有事件冒泡到document节点的时候,检查这个事件是不是 click 事件,目标元素能不能匹配‘a’,如果两个条件都是真,处理函数执行。

四、 Jquery的.delegate()函数

$('#container').delegate('a','click',function() { alert("That tickles!") });

JQuery的CSS选择器找到ID=container的对象,绑定处理函数到他的click 事件,事件‘click’和元素类型‘a’作为函数的参数。若有事件冒泡到 $(‘#container’)对象,检查事件是不是click,目标元素是不是类型为a,如果两者都符合,执行函数。

举例:

$('a').live('click',function() { blah() });

$(document).delegate('a','click',function() { blah() });

第二个方法执行效率高于第一个,因为第一个方法需要遍历整个文档($(document)元素)查找$('a')对象,并保存为jQuery对象。第二个方法只需要存贮$(document)元素,这样不需要完全载入DOM元素,就能执行后面的处理函数。

举例:


[javascript] view plain copy print ?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <script type="text/javascript" src="jquery.js"></script>
  6. <script type="text/javascript">
  7. $(document).ready(function(){
  8. $("div").delegate("p","click",function(){
  9. $(this).slideToggle();});
  10. $("button").click(function(){
  11. $("<p>这是一个新段落。</p>").insertAfter("button");});
  12. });
  13. </script>
  14. </head>
  15. <body>
  16. <div style="background-color:yellow">
  17. <p>这是一个段落。</p>
  18. <p>请点击任意一个p元素,它会消失。</p>
  19. <button>在本按钮后面插入一个新的p元素</button>
  20. </div>
  21. </body>
  22. </html>
资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 行列式是线性代数的核心概念,在求解线性方程组、分析矩阵特性以及几何计算中都极为关键。本教程将讲解如何用C++实现行列式的计算,重点在于如何输出分数形式的结果。 行列式定义如下:对于n阶方阵A=(a_ij),其行列式由主对角线元素的乘积,按行或列的奇偶性赋予正负号后求和得到,记作det(A)。例如,2×2矩阵的行列式为det(A)=a11×a22-a12×a21,而更高阶矩阵的行列式可通过Laplace展开或Sarrus规则递归计算。 在C++中实现行列式计算时,首先需定义矩阵类或结构体,用二维数组存储矩阵元素,并实现初始化、加法、乘法、转置等操作。为支持分数形式输出,需引入分数类,包含分子和分母两个整数,并提供与整数、浮点数的转换以及加、减、乘、除等运算。C++中可借助std::pair表示分数,或自定义结构体并重载运算符。 计算行列式的函数实现上,3×3及以下矩阵可直接按定义计算,更大矩阵可采用Laplace展开或高斯 - 约旦消元法。Laplace展开是沿某行或列展开,将矩阵分解为多个小矩阵的行列式乘积,再递归计算。在处理分数输出时,需注意避免无限循环和除零错误,如在分数运算前先约简,确保分子分母互质,且所有计算基于整数进行,最后再转为浮点数,以避免浮点数误差。 为提升代码可读性和可维护性,建议采用面向对象编程,将矩阵类和分数类封装,每个类有明确功能和接口,便于后续扩展如矩阵求逆、计算特征值等功能。 总结C++实现行列式计算的关键步骤:一是定义矩阵类和分数类;二是实现矩阵基本操作;三是设计行列式计算函数;四是用分数类处理精确计算;五是编写测试用例验证程序正确性。通过这些步骤,可构建一个高效准确的行列式计算程序,支持分数形式计算,为C++编程和线性代数应用奠定基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值