Jquery – 添加DOM元素时运行函数

我有一个jQuery和jQuery UI的网站。 我有一个Javascript函数:

function ToButton() { $(".ToButton").button(); } 

此函数在页面加载后运行,并使用类“ToButton”更改所有元素。

当用户按下按钮时,我也会更改HTML代码。 例如:

 $("body").append('Test Button'); 

我也想对这个新元素运行ToButton函数,但jQuery中的live或delegate方法没有“show”或“create”事件类型。 所有HTML代码更改后我都需要调用函数ToButton()。

你能帮助我,我如何将ToButton函数委托给所有元素?

您需要在追加新元素后手动执行此操作。 代表和现场活动仅适用于冒泡的活动。

但是,通过监听一些DOM事件 ,可以在添加新元素时获得通知,从而使生活更轻松。

您可以通过以下几种方式实现此目的:

1) 使用变异事件或观察者

第一种方法很容易查找,你可以在这里找到有关DOM Level 3 Mutation Events的更多信息: http : //help.dottoro.com/ljmcxjla.php – 以及新的DOM Level 4 Mutation Observers: https:// developer .mozilla.org / EN-US /文档/ DOM / MutationObserver

虽然现在广泛支持DOM Level 3 Mutation事件,但它们是一种弃用的API,可能会破坏某些浏览器的性能。 下面的#2使用的方法适用于所有支持CSS动画的浏览器,并且不会影响性能。

2) 使用我设计的CSS关键帧动画事件方法来检测DOM节点插入

每当浏览器的内部CSS样式机制解析一个节点时,您就可以使用虚拟关键帧动画事件来冒泡插入事件通知,我在这里写了一篇非常详细的post: http : //www.backalleycoder.com/2012/ 4月25日/我想学一-damnodeinserted /

你可以创建一个这样的简单函数:

 function AddButton (parent, buttonElement) { $(buttonElement).addClass('.ToButton').appendTo($(parent)).button(); } 

使用像

 AddButton('body', 'Test Button'); 

不是最好的方式,但你也可以创建一个简单的jQuery插件或类似的东西。 我刚刚提出了一个总体思路(我这样说是因为你使用了一个以类似方式构建的函数)。

当然最好的方法是使用DOM事件,但感谢IE我们不能。

嗯,不确定我是否做对了,但这不起作用吗?:

 $("body").append( $('Test Button').button() ) 

仅供您参考: http : //www.bennadel.com/blog/1751-jQuery-Live-Method-And-Event-Bubbling.htm