gpt4 book ai didi

Javascript 函数指针与 Jquery 导致 domManip 不是函数错误

转载 作者:行者123 更新时间:2023-12-01 02:16:16 25 4
gpt4 key购买 nike

JQuery 版本

jQuery JavaScript 库 v1.4.4

问题

解决方案可能是显而易见的,但我却摸不着头脑。

问题是在进行一些代码优化时,我遇到了一个循环,该循环在 jquery 元素上调用了几次追加,并且这是一个相当大的循环。所以它看起来像这样:

var list_of_goodies = [1,2,3,...];
$.each(list_of_goodies, function(val) {
$('div.toaddto').append(val);
...some more code...
$('div.toaddto').append(otherval);
});

正如你所看到的,并没有真正优化,所以我尝试使用函数指针,所以它看起来像这样:

var list_of_goodies = [1,2,3,...];
var toaddtoAppend = $('div.toaddto').append;
$.each(list_of_goodies, function(val) {
... the other code...
toaddtoAppend(val).append(otherval);
});

这看起来可能不是一个巨大的优化,但它是一个很大的列表,这可以节省大量的查找时间,尤其是在旧版 IE 中。但这会导致错误。

错误

this.domManip is not a function

不幸的是,这是来自缩小版的 jQuery,因此没有更多信息,但它似乎发生在 wrapInner() 内。

问题

这是范围问题还是引用问题?我在没有使用 jQuery 的情况下对其进行了测试,并且函数指针有效。

$.each 或 for 循环最终得到相同的结果。有人知道我哪里出错了吗?我对 javascript 如何处理函数指针知之甚少,特别是当它们应该与某个实例相关联而不仅仅是静态时,所以请原谅这里的任何无知。

测试的浏览器

  • 火狐3.6
  • IE 6、7 和 8
  • Chrome 9.0.something

无论浏览器如何,结果总是相同的,这似乎表明浏览器处理指针的方式并不是导致指针损坏的原因。

自己测试一下

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
var iterables = [];
for (var i = 0; i < 1000; i++) iterables.push(i);
var divAppend = $('#test').append;
$.each(iterables, function(val) {
divAppend(val);
});
});
</script>
</head>
<body>
<div id="test"></div>
</body>
</html>

谢谢,登马特

最佳答案

当您编写 var divAppend = $('#test').append 时,您将存储对 jQuery 标准 append 函数的引用。
它相当于编写 var divAppend = $.fn.append - $('#test') 不会存储在任何地方。

当您将 divAppend 作为普通函数调用时,其 thiswindow,而不是 jQuery 对象。

您需要存储一个显式调用 $('#test').append(...) 的函数,或使用 divAppend.call($('#test') , val) 以在右侧对象上显式调用 append

关于Javascript 函数指针与 Jquery 导致 domManip 不是函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com