除夕一梦

vuePress-theme-reco 林除夕    2022
除夕一梦

Choose mode

  • dark
  • auto
  • light
home
Category
  • B-前端杂谈
  • C-JavaScript
  • E-H5C3
  • F-vue
  • G-思考
  • H-项目记录
  • I-学习笔记
  • Y-有趣
  • z-hexo
Tag
About
TimeLine
Contact
  • github
  • gitee
  • 知乎
author-avatar

林除夕

25

Article

35

Tag

home
Category
  • B-前端杂谈
  • C-JavaScript
  • E-H5C3
  • F-vue
  • G-思考
  • H-项目记录
  • I-学习笔记
  • Y-有趣
  • z-hexo
Tag
About
TimeLine
Contact
  • github
  • gitee
  • 知乎

C-JavaScript-01: jquery操作之:如何获取动态生成元素(获取未来元素)

vuePress-theme-reco 林除夕    2022

C-JavaScript-01: jquery操作之:如何获取动态生成元素(获取未来元素)

林除夕 2019-07-11 10:18:42 前端jQuery

# what


  1. # 动态生成元素?

    1. html代码中没有的元素
    2. 通过js生成的元素
    3. 通过模板字符串生成的元素
    4. 反正就是页面加载后才生成的元素

# why


  1. 传统的方**直接使用$(选择器)**无法获取到该元素
  2. 为新增元素绑定事件
  3. 获取新增元素列表进行遍历操作

# how


  1. # 绑定事件的几种方式

    1. 自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品
  2. # on方法为子元素绑定事件

    1. $('选择器').on('事件名称','子元素选择器',callback)

    2. example:

      <body>
        <div id="father"></div>
      </body>
      <script src="jquery.js"></script>
      <script>
        // 动态生成子元素
        var children = $('<div id="children"></div>')
        // 将子元素加入父元素
        $('#father').append(children);
        // 为子元素注册事件
        $('#father').on('click','#children',function(){
          // 输出子元素中的内容
          console.log($(this).val());
        });
      </script>
      
    3. 通过上面的例子可以看到要使用on()方法获取子元素,必须要绑定一个方法

      有的教程说使用delegate() 方法获取元素,事件不是必须的但是官方文档上写了,事件也是必须存在的所以我不考虑这种方式。

  3. # 如何获取元素列表进行遍历

    1. 很简单

    2. 直接在on()方法的回调函数中获取

    3. example:

      <body>
        <div class="father"></div>
      </body>
      <script src="jquery.js"></script>
      <script>
        for(var i = 0 ;i < 10; i++){
          // 动态生成子元素
          var children = $('<div class="children">你好啊</div>')
          // 将子元素加入父元素
          children.appendTo($('.father'));
        }
        // 为子元素注册事件
        $('.father').on('click','.children',function(){
          // 输出所有子元素
          console.log($('.father .children'));
        });
      </script>