在动态附加的 `<li>` 上触发 jQuery 函数
Fire jQuery function on a `<li>` that is appended dynamically
我需要 运行 对 <li>
的任何新 jQuery 函数 appended/added 添加到 <ul>
列表中。我们可能会开始:
<ul id="my">
<li></li>
<li></li>
</ul>
在页面上发生一些事件但没有页面刷新后,我们有这个:
<ul id="my">
<li></li>
<li></li>
<li></li> <!-- Added dynamically -->
</ul>
我想运行一个jQuery函数在这个(以及任何未来)新<li>
上。
使用 .on
函数,我可以捕获包装发生的任何变化 <ul>
:
jQuery('body').on('DOMSubtreeModified', 'ul#my', function() {
...
});
如何调整它以不捕获 <ul>
内的任何更改,而是捕获正在添加的特定 <li>
?大致如下:
jQuery('body').on('DOMSubtreeModified', 'NEW_LI', function() {
NEW_LI.css("background-color", "yellow");
});
MutationObserver
API 是观看 DOM 修改的推荐方式。它也很容易集成。
一定要检查 mutation
变量,以了解您可以访问哪种信息。
function createObserver(callback) {
return new MutationObserver(function (mutationRecords) {
mutationRecords.forEach(callback);
});
}
$("ul").each(function () {
var obs = createObserver(function (mutation) {
$(mutation.addedNodes).css("background-color", "yellow");
setTimeout(function () {
$(mutation.addedNodes).css("background-color", "");
}, 1000);
});
obs.observe(this, { childList: true });
});
// ---------------------------------------------------------------
setTimeout(function () {
$("<li>New content appears!</li>").appendTo("ul#my");
}, 2000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="my">
<li>existing content</li>
<li>existing content</li>
<li>existing content</li>
</ul>
我需要 运行 对 <li>
的任何新 jQuery 函数 appended/added 添加到 <ul>
列表中。我们可能会开始:
<ul id="my">
<li></li>
<li></li>
</ul>
在页面上发生一些事件但没有页面刷新后,我们有这个:
<ul id="my">
<li></li>
<li></li>
<li></li> <!-- Added dynamically -->
</ul>
我想运行一个jQuery函数在这个(以及任何未来)新<li>
上。
使用 .on
函数,我可以捕获包装发生的任何变化 <ul>
:
jQuery('body').on('DOMSubtreeModified', 'ul#my', function() {
...
});
如何调整它以不捕获 <ul>
内的任何更改,而是捕获正在添加的特定 <li>
?大致如下:
jQuery('body').on('DOMSubtreeModified', 'NEW_LI', function() {
NEW_LI.css("background-color", "yellow");
});
MutationObserver
API 是观看 DOM 修改的推荐方式。它也很容易集成。
一定要检查 mutation
变量,以了解您可以访问哪种信息。
function createObserver(callback) {
return new MutationObserver(function (mutationRecords) {
mutationRecords.forEach(callback);
});
}
$("ul").each(function () {
var obs = createObserver(function (mutation) {
$(mutation.addedNodes).css("background-color", "yellow");
setTimeout(function () {
$(mutation.addedNodes).css("background-color", "");
}, 1000);
});
obs.observe(this, { childList: true });
});
// ---------------------------------------------------------------
setTimeout(function () {
$("<li>New content appears!</li>").appendTo("ul#my");
}, 2000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="my">
<li>existing content</li>
<li>existing content</li>
<li>existing content</li>
</ul>