jQuery中是否有任何方法可以将监听器附加到单元格,以便当单元格内的文本发生更改(通过JavaScript而不是用户)时,会触发事件?
答案 0 :(得分:5)
要扩展mway's answer,这里有一些代码。
var td = $('#my-table tr td:eq(1)');
var tdHtml = td.html();
setInterval(function() {
if (td.html() !== tdHtml) {
// it has changed
tdHtml = td.html();
}
}, 500);
......以及他的第二个建议。
function updateTd(html) {
$('#my-table tr td:eq(1)').html(html);
// additional code
}
您还可以将DOMSubtreeModified
事件绑定到元素,但浏览器支持不是最好的。
答案 1 :(得分:4)
不是原生,不是。你有几个选择:
1)使用setInterval()
测试该值与之前的值,如果不同则采取相应的行动。
2)使用常用方法更改单元格内容,这样您还可以在更改其值时执行其他逻辑,而无需多次重写。
答案 2 :(得分:0)
恐怖。可能在2010年被接受了。
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
// NB the 1st char put or typed into a TD causes a mutation in the TD...
// but chars 2 ... n cause a mutation in its child '#text' node
let target = mutation.target;
if( target.cellIndex === undefined ){
target = target.parentElement;
}
// NB don't use a "truthy" test for cellIndex here: you would miss index 0!
if( target !== null && target.cellIndex !== undefined ){
// ... then the target is the TD where the content has changed.
}
});
});
const config = { attributes: true, childList: true, characterData : true, subtree : true };
observer.observe( htmlTable, config );
答案 3 :(得分:0)
使用输入事件侦听器。
$(document).on('input','#table> tbody> tr> td',function(){})