JQuery如何监听一个DIV宽高的变化?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JQuery如何监听一个DIV宽高的变化?相关的知识,希望对你有一定的参考价值。

你可以试试html5的API:MutationObserver,非常强大可以监控一切变动;
特性如下:

1、它等待所有脚本任务完成后,才会运行,即采用异步方式

2、它把DOM变动记录封装成一个数组进行处理,而不是一条条地个别处理DOM变动。

3、它即可以观察发生在DOM节点的所有变动,也可以观察某一类变动

详细说就是,事件是同步触发,也就是说DOM发生变动立刻会触发相应的事件;Mutation
Observer则是异步触发,DOM发生变动以后,并不会马上触发,而是要等到当前所有DOM操作都结束后才触发。

举例来说,如果在文档中连续插入1000个段落(p元素),会连续触发1000个插入事件,执行每个事件的回调函数,这很可能造成浏览器的卡顿;而Mutation
Observer完全不同,只在1000个段落都插入结束后才会触发,而且只触发一次。

当然,一般情况下没什么问题。

示例代码如下:
var callback = function(records)
records.map(function(record)
console.log('变动 type: ' + record.type);
console.log('变动 target: ' + record.target);
);
;
var obser = new MutationObserver(callback);
var obj = document.getElementById('right_col_peck');
var options =
attributes: true,
attributeFilter: ['class']
;
obser.observe(obj, options);//开始监听
//obser.disconnect();//停止监听

Ps:MutationObserver所观察的DOM变动(即上面代码的options对象),包含以下类型:
1、childList:子元素的变动
2、attributes:属性的变动
3、characterData:节点内容或节点文本的变动
4、subtree:所有下属节点(包括子节点和子节点的子节点)的变动
参考技术A 给你推荐一个jquery重新封装resize代码,可以监听几乎所有html标签,比如text、p、div、span等。$(function()// Bind the resize event. When any test element's size changes, update its// corresponding info div.$('.test').resize(function()var elem = $(this);// Update the info div width and height - replace this with your own code// to do something useful!elem.closest('.container').find('.info').text( this.tagName + ' width: ' + elem.width() + ', height: ' + elem.height() ););// Update all info divs immediately.$('.test').resize();// Add text after inline "add text" links.$('.add_text').click(function(e)e.preventDefault();$(this).parent().append( ' Adding some more text, to grow the parent container!' ););// Resize manually when the link is clicked, but only for the first paragraph.$(this).parent().resize();););看一下官方介绍吧,里面有几个例子!jquery resize event本回答被提问者采纳

通过jQuery实时监听表格行数变化

[本文出自天外归云的博客园]

使用bootstrap table组件,当使用过滤器的时候,页面的表格行数发生变化,此时需要统计表格行数。想要监听表格变化,如何做呢?

使用场景:有一个表格里放着许多测试用例,当使用过滤器的时候表格中测试用例的数量发生了变化,此时要重新统计表格中的测试用例个数并反馈在页面上。

这里设:表格的tbody元素的id为monitorTbody,反馈测试用例个数的div的id是caseCount。

下面是两种实现的方法:

// 实时监听DOM变化,方法1:jQuery监听div内容变化(控制台有报错)
$(‘#monitorTbody‘).bind(‘DOMNodeInserted‘, function () {
    var count = $("#monitorTbody").find("tr").length;
    $("#caseCount").html("测试用例 " + count.toString() + "条过滤结果");
});

// 实时监听select组件变化,方法2:动态绑定select的change事件
$("select").change(function () {
    //延时两秒执行
    setTimeout(function () {
        var count = $("#monitorTbody").find("tr").length;
        $("#caseCount").html("测试用例 " + count.toString() + "条过滤结果");
    }, 2000);
});

使用方法一需要注意:不要让id为caseCount的元素在id为monitorTbody的元素中,否则控制台会有无限递归报错。

以上是关于JQuery如何监听一个DIV宽高的变化?的主要内容,如果未能解决你的问题,请参考以下文章

jquery resize 如何监听div或其它元素的resize事件

jquery获取img宽高

如何监听div内容的改变?

怎样设置div 高度随宽度变化而变化?比如说height=width*80%?

div元素监听resize的方法

怎么让一个不定宽高的div水平居中,垂直水平居中