2

在 jQuery 中,您可以使用.live().on().delegate()将事件绑定到页面上尚未添加的 DOM 元素。

是否可以使用类似的技术来选择尚未添加的 DOM 元素以应用某些功能?

例如,我想选择所有具有类 .req 并包含一个名为“必需”的水印的输入元素。

我已经使用 jquery 插件来做水印,但不能处理动态添加到页面的 DOM 元素。

4

4 回答 4

4

您可以使用突变事件( DOMNodeInserted),但它们已被弃用。
因此,除非您想使用它们或每 X 次拉动 DOM,否则答案是否定的

牵引方式:

setInterval(function(){
    // Do what you want here.
    $('.req').watermark("Required");
}, 500); // evey half a second.
于 2012-05-16T13:00:53.637 回答
1

抱歉不行。事件委托之所以有效,是因为您在技术上绑定到已经存在的 DOM 节点,因此最终触发事件的元素还不存在并不重要。有 DOM 级别 2 事件正在进行中(并且已经在某些浏览器中实现)可以让您对正在创建的新 DOM 节点或正在操作的现有节点做出反应,但是在浏览器支持更好之前,实际上没有任何选项除了重复轮询 DOM 来寻找新节点,这是非常低效的。

于 2012-05-16T13:02:16.723 回答
0

我知道这篇文章很旧,但我相信这可以使用 jQuery find方法来完成。

http://jsfiddle.net/vreTG/1/

// Generate some dynamic content
var dyn = '<ul>';
dyn += '<li class="req">Name</li>';
dyn += '<li class="req">Address</li>';
dyn += '<li class="opt">Phone Number</li>';
dyn += '<ul>';

// Add to DOM
$("#container").html(dyn);

// Find required fields
$("#container").find(".req")
    .prepend("* ")
    .css("color", "#900");
于 2013-01-09T16:49:42.527 回答
0

答案是,这取决于您如何将元素插入 DOM。如果您通过 jQuery 插入它们,那么您可以使用诸如livequery之类的插件。如您所见,它与核心操作方法挂钩,并且无论何时调用它们,它都会运行在实时查询中注册的回调。如果您通过 vanilla JS 插入元素,那么正如其他人所说,DOM 变异事件已被弃用且不可靠,因此轮询将是您的最佳选择。

于 2012-05-16T13:15:43.597 回答