Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 捕获动态更新表中的更改_Javascript_Jquery - Fatal编程技术网

Javascript 捕获动态更新表中的更改

Javascript 捕获动态更新表中的更改,javascript,jquery,Javascript,Jquery,我有一个动态加载表的页面。我想检查是否有任何tds包含关键字,并根据该关键字更改一些CSS样式 在第一次加载时,一切正常,但当表中发生更改时,我的函数不会被触发 这是我的密码。第一个街区很好,但第二个街区不行 $( document ).ready(function() { $("tr td:contains('*')").each(function(){ $(this).parent("tr").css({ "background-color": "r

我有一个动态加载表的页面。我想检查是否有任何
td
s包含关键字,并根据该关键字更改一些CSS样式

在第一次加载时,一切正常,但当表中发生更改时,我的函数不会被触发

这是我的密码。第一个街区很好,但第二个街区不行

 $( document ).ready(function() {
        $("tr td:contains('*')").each(function(){
            $(this).parent("tr").css({ "background-color": "red" });
            $(this).parent().children().css({ "background": "inherit" });
        });
    });

jQuery('body').on('change', '.content', function () {
    $("tr td:contains('*')").each(function(){
        $(this).parent("tr").css({ "background-color": "red" });
        $(this).parent().children().css({ "background": "inherit" });
    });
});

使用document.ready包装“更改时”功能

$(function(){
/*code*/
});

使用document.ready包装“更改时”功能

$(function(){
/*code*/
});

如果我理解正确,您正在尝试侦听表本身的更改,这意味着内部html更改、添加行等

不幸的是,您没有看到
更改
事件触发的原因是该事件仅在元素的
更改时触发;表、行和单元格没有此类属性

从jQuery关于更改事件的文档中,可以找到:

此事件仅限于元素、框和 元素。对于选择框、复选框和单选按钮, 当用户使用进行选择时,会立即触发该事件 鼠标,但对于其他元素类型,事件延迟到 元素失去焦点

它第一次工作的原因当然是因为,您没有将它包装在
change
事件中;当on ready功能启动时,它会立即启动。您的选择器工作得很好,当然,表永远不会触发您要查找的事件

我个人并没有这样做过,但在SO上找到的一个解决方案是,建立一种民意调查仪,不断检查是否有任何变化。它还解释了如何设置自定义事件,从而将代码进一步划分为可管理的部分

显然,他们还讨论了使用JQGRID,它有一个刷新事件,你也可以考虑。 希望有帮助

编辑


您还可以使用
MutationObserver
,可以找到它的文档,这看起来是一个很好的例子。在SO示例中,海报表明他们早在IE 7的浏览器上就对其进行了测试,但是根据,
MutationObserver本身并不是100%兼容的(可能他使用了polyfill),因此请确保您正确地对其进行了测试。

如果我理解正确,您正在尝试侦听表本身的更改,表示内部html更改、添加行等

不幸的是,您没有看到
更改
事件触发的原因是该事件仅在元素的
更改时触发;表、行和单元格没有此类属性

从jQuery关于更改事件的文档中,可以找到:

此事件仅限于元素、框和 元素。对于选择框、复选框和单选按钮, 当用户使用进行选择时,会立即触发该事件 鼠标,但对于其他元素类型,事件延迟到 元素失去焦点

它第一次工作的原因当然是因为,您没有将它包装在
change
事件中;当on ready功能启动时,它会立即启动。您的选择器工作得很好,当然,表永远不会触发您要查找的事件

我个人并没有这样做过,但在SO上找到的一个解决方案是,建立一种民意调查仪,不断检查是否有任何变化。它还解释了如何设置自定义事件,从而将代码进一步划分为可管理的部分

显然,他们还讨论了使用JQGRID,它有一个刷新事件,你也可以考虑。 希望有帮助

编辑


您还可以使用
MutationObserver
,可以找到它的文档,这看起来是一个很好的例子。在SO示例中,海报表明他们早在IE 7的浏览器上就对其进行了测试,但是根据,
MutationObserver
本身不是100%兼容的(可能他使用了polyfill),因此请确保您正确测试它。

感谢大家的帮助,我在这里找到了使用自定义构建插件的解决方案:


它对我来说就像一个符咒

感谢大家的帮助,我在这里找到了使用自定义构建插件的解决方案:


它对我来说就像一个符咒

单元格是否实际包含“*”?
。内容当然是表单元素,其中值通过选择或键入某个内容而改变?如果您只是尝试筛选出没有内容的元素,那么使用过滤器检查长度会更好。对于煤炭,有包含“*”:)和.content的单元格是table wrapper…如果第二个块内的警报被触发,请尝试在第二个块内的
每个
回调中放置警报。这会告诉你你的选择器是否匹配任何东西。如果我把它放在“each”回调中,它会被触发,现在我真的不明白了??单元格是否真的包含“*”?
。内容当然是表单元素,其中值通过选择或键入某个内容而改变?如果您只是尝试筛选出没有内容的元素,那么使用过滤器检查长度会更好。对于煤炭,有包含“*”:)和.content的单元格是table wrapper…如果第二个块内的警报被触发,请尝试在第二个块内的
每个
回调中放置警报。这将告诉你你的选择器是否匹配任何东西。如果我把它放在“每个”回调中,它会被触发,现在我真的不明白??我试过了,但它没有改变任何东西,问题是我确实发现有东西改变了(如果我放了警报并改变了一些东西,警报会被触发),但其余的代码不起作用。。。和一些代码w