44 jQuery获取不到新添加的内容 新元素快到碗里来 - 雪炭网

jQuery获取不到新添加的内容 新元素快到碗里来2014-12-18 14:33:49

( 9人已投票,[高质量] )
分享:
31.3K

jQuery是一款应用面广、操作便捷、兼容性好的JS插件,在使用过程中常会遇到这样一个问题,那就是如何获取新添加的元素内容?

首先要区分jQuery的版本,如果不知道的话,特别是名称类似jQuery.min.js可以打开文件在头部注释部份就可以看到版本信息。


下面开始举例说明获取方法:

正常低版本的,针对新添加的元素时需要用到live()方法,从jQuery1.3中增加

<div class="testDiv"></div>
$(".testDiv").live("click", function(){
//console.log($(this).html());
});

值得一提的是:与bind()不同,live()一次只能绑定一个事件。

这个方法跟传统的bind很像,区别在于用live来绑定事件会给所有当前以及将来在页面上的元素绑定事件(使用委派的方式)。比如说,如果你给页面上所有的li用live绑定了click事件。那么当在以后增加一个li到这个页面时,对于这个新增加的li,其click事件依然可用。而无需重新给这种新增加的元素绑定事件。

.live()与流行的liveQuery插件很像,但有以下几个主要区别:

  • .live 目前只支持所有事件的子集,支持列表参考上面的说明。

  • .live 不支持liveQuery提供的“无事件”样式的回调函数。.live只能绑定事件处理函数。

  • .live 没有”setup”和”cleanup”的过程。因为所有的事件是委派而不是直接绑定在元素上的。

要移除用live绑定的事件,请用die方法


对于高版本的jQuery引入了on()方法;jQuery1.7

on()对应着off();其实on方法的引入是为了考虑到效能因素,近而取代了bind(), live(), delegate()三个方法

on()方法可算是个全能儿!雪炭网-雪中送炭-乐趣无限!


函数原型:on(events,[selector],[data],fn)

events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydown.myPlugin" 。

selector:一个选择器字符串用于过滤器的触发事件的选择器元素的后代。如果选择器为null或省略,当它到达选定的元素,事件总是触发。

data:当一个事件被触发时要传递event.data给事件处理函数。

fn:该事件被触发时执行的函数。 false 值也可以做一个函数的简写,返回false。


<div class="testDiv"><span class="testSpan">this is a test.</span></div>

以下调用是不是很Cool

$(".testDiv .testSpan").on({
mouseenter:function(){
//blah , blah , blah
},
mouseleave:function(){
//blah , blah , blah
},
click:function(){
//blah , blah , blah
}
})


值得一提的是:mouseenter与mouseout为啥不用mouseover,mouseout,呵呵,多用几次你会发现,前两者可以有效的防止冒泡事件的发生

引申:处理函数冒泡的最有效方式可以在结束时return false;效果比event.preventDefault()还好用。


一切如此美好,但在调用的时候悲剧的是也有可能会遇到这个问题:有的时候on并没有获得到新添加的元素,怎么回事,难道on()升级后还不如bind()方法了?

没错,这是我当初的疑问,事实原因是需要深度绑定!这个也是我纠结了好久的问题,还是一个老外的指点,thanks!

现在来看,遇到这个问题,要么回退低一点的版本,1.8或1.9都可以,但我用的是2.0.3

解决方法如下:

$("div.testDiv").on({
mouseenter:function(){
//blah , blah , blah
},
mouseleave:function(){
//blah , blah , blah
},
click:function(){
//blah , blah , blah
}
},".testSpan");


这是为什么呢,谁管那么呢,到碗里来就行了(我也不清楚哒),欢迎探讨,哈哈

jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来jQuery获取不到新添加的内容 新元素快到碗里来











  • 花花的头像
    花花 - 2015-06-17 10:13:52

    有用,超赞!

    花花的头像

    X
  • 要啥自行车的头像
    要啥自行车 - 2018-01-24 00:27:02

    $(".main_div").on("click",".add_div",function(){
    //alert(123);
    });
    说明:
    main_div必须是一直存在的,add_div是后加的,一般都采用这样的方法来识别。

    要啥自行车的头像

    X
头像

snowcoal
  • jQuery
  • 新添加
  • 内容获取

收藏到我的私密空间

标题:jQuery获取不到新添加的内容 新元素快到碗里来

作者:花花世界

你暂未登录,请登录后才可收藏至您的私密空间 确认取消
雪炭网

键盘操作 更便捷 -雪炭网雪中送炭-乐趣无限

如果本站的内容有幸帮助到了您,建议您了解一下当页的广告内容哦,我们的进步离不开您的支持,Thank you~