javascript递归函数问题求大神看看
问题描述
大神晚上好,请帮我看看我的函数为什么不能执行呢?情况说明:由于p中的table是通过ajax加载过来的,函数的目的是判断有没有这table,如果有则让其背景变红,没有的话,就1秒后再执行以下这个函数,但是现在当table已经加载显示后,find()函数并没有让table变红(报错:Uncaught RangeError: Maximum call stack size exceeded)先谢谢大神们了!
问题解答
回答1:因为你用p.getElementsByTagName(’table’)[0]这个取到的是一个DOM对象,由于DOM对象没有.length属性,所以target.length其实是未定义的。而undefined > 0的值一直是false,所以你会无限次地调用else分支,所以也就会添加无数次的find(p)绑定。所以浏览器提示find调用次数超出最大限制。
正确的做法是让target为p.getElementsByTagName('table'),这才是一个数组,才有.length的值。
Update代码:方案1:(判断取到所有table的数组长度,并取第一个操作)
function find(p) { var target = p.getElementsByTagName('table'); if (target.length > 0) {target[0].style.background = ’red’; } else {setTimeout(function() { find(p);}, 1000) }};
方案2:(直接判断table,并直接操作取到的table)
function find(p) { var target = p.getElementsByTagName('table')[0]; if (target) {target.style.background = ’red’; } else {setTimeout(function() { find(p);}, 1000) }};回答2:
target.length target 是 table, table.length 是什么?
参考一下
function find(p) { var interval = setInterval(function () { var target = p.getElementsByTagName('table')[0] if (target) { clearInterval(interval) target.style.background = ’red’ } }, 1000)}
相关文章:
1. html5 - 在一个页面中 初始了两个swiper 不知道哪里错了 一直不对2. docker绑定了nginx端口 外部访问不到3. android - 京东移动端网页和其app加载的url所做的呈现不应该是完全一样的吗?4. javascript - 如何将 windows 下编辑器中的 CRLF 替换为 LF?5. css3中translate(-50%,-50%)对 transform-origin的奇葩影响?6. javascript - 求解答:实例对象调用constructor,此时constructor内的this的指向?7. mysql5.7就没有官方性质的详细配置文件吗?求大神告知8. docker-machine添加一个已有的docker主机问题9. 关于docker下的nginx压力测试10. python的MySQLdb库中的executemany方法如何改变默认加上的单引号?

网公网安备