JS获取动态添加元素的方法详解


Posted in Javascript onJuly 31, 2019

本文实例讲述了JS获取动态添加元素的方法。分享给大家供大家参考,具体如下:

在页面的渲染中,我们经常用遇到动态添加的DOM元素,那么在获取这些元素的时候或则为这些DOM元素的时候,我们有下面三种处理方法:

  • 1.  在模板引擎里面添加行内事件
  • 2.  利用事件的委托获取(常用)
  • 3.  在ajax的监听响应完成函数后面获取

一 在模板引擎里面添加行内事件

添加行内事件就是在标签里面添加事件,这样就可以直接获取到动态添加的元素.

<!-- 1.准备一个模板 -->
  <script id="tpl-table" type="text/html">
    {{ each rows value key }}
      <tr>
        <td>
            <button type="button" onclick="updateUser({{ value.id }} {{@ ','}} {{value.isDelete}})" id="btn-status" >按钮</button>
        </td>
      </tr>
    {{ /each }}
  </script>
//事件函数,书写在单独的JS文件中
  //带有参数,参数是模板传递过来的
  function updateUser (id,isDelete){
      //doSomething.........
  }

上面使用的模板是art-template,在模板里面我们给button标签注册了点击事件onclick,但是事件函数却是一个带参数的函数.当点击这个按钮的时候,就会触发点击事件,进而调用updateUser()函数.

二. 利用事件的委托获取(常用)

事件的委托可以为动态添加的元素绑定事件.

//同样以上面的代码为例,tr最后是添加到table中,那么将点击事件委托给table
$('table').on('click','tr #btn-status',function(){
    //doSomething........
})

上面的代码意思是,将点击事件绑定给table元素,但是我们点击的是table里面的button按钮,此时事件的冒泡起作用,向外冒泡遇到父元素table也有点击事件,那么就会去执行这个事件.

三 在ajax的监听响应完成函数后面获取

当我们把模板渲染出来的时候,此时页面上已经是最新的动态元素了,DOM也已经重绘完成,此时再去获取动态元素.

$.ajax({
    url : 'text.php',
    dataType : 'json',
    success : function(obj){
        //渲染动态元素到页面上
        var trHTML = template('tpl-table',obj);
        $('table').append(trHTML);
        //获取动态元素注册点击事件
        $('tr #btn-status').on('click',function(){
            //doSomething........
        });
    }
})

四 总结:

第一种方法要注意事件函数必须是全局函数;第二种最常用,但是三者的共同点都是当页面已经渲染完毕后才能获取到动态元素.

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JS验证日期的格式YYYY-mm-dd 具体实现
Jun 29 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
Jan 18 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
Apr 03 Javascript
jQuery Dialog对话框事件用法实例分析
May 10 Javascript
Vue.js基础学习之class与样式绑定
Mar 20 Javascript
Vue.js事件处理器与表单控件绑定详解
Mar 20 Javascript
Express URL跳转(重定向)的实现方法
Apr 07 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
May 17 Javascript
vue.js语法及常用指令
Oct 29 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
Oct 09 Javascript
Vue.js组件通信之自定义事件详解
Oct 19 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 #jQuery
详解Vuex下Store的模块化拆分实践
Jul 31 #Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 #Javascript
Vuex 模块化使用详解
Jul 31 #Javascript
判断“命令按钮”是否被鼠标单击详解
Jul 31 #Javascript
express框架下使用session的方法
Jul 31 #Javascript
ES6中异步对象Promise用法详解
Jul 31 #Javascript
You might like
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
php中使用sftp教程
2015/03/30 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
详解Django框架中的视图级缓存
2015/07/23 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
中专自我鉴定范文
2013/10/16 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
2015年防汛工作总结
2015/05/15 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
MySQL GTID复制的具体使用
2022/05/20 MySQL