为什么JavaScript wrapInner会抛出错误?

时间:2012-09-27 13:48:52

标签: javascript jquery firefox-addon runtime-error

我有一个带有以下代码的Firefox插件:

$("table > tbody > tr > td[width='600']").wrapInner("<div id='content_cont' />");

这行代码执行,但后面的所有行都不执行。它会在Firefox错误控制台中抛出一个错误,该错误的代码超过500KB。

CODE:

An exception occurred.
Traceback (most recent call last):
  File "resource://jid0-ib8arkgejpxo7qidkuieut5rquk-at-jetpack/flvs-educator-release-version/data/redesign.js", line 49, in 
    $("table > tbody > tr > td[width='600']").wrapInner("<div id='content_cont' />");
  File "resource://jid0-ib8arkgejpxo7qidkuieut5rquk-at-jetpack/flvs-educator-release-version/data/jquery.js", line 2, in .wrapInner
    (function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s)...<tons of meaningless code>...&define("jquery",[],function(){return p})})(window);
ReferenceError: Begin is not defined

我无法弄清楚为什么会这样做。语法错了吗?

1 个答案:

答案 0 :(得分:5)

如果您要换行的内容包含任何script个元素,那么wrapInner将再次执行它们,即使它们是在首次加载页面时运行的。有关更多信息,请参阅jQuery错误跟踪器上的Ticket #9134

看起来您正在包装的内容中的script个元素之一出现错误,而该错误导致您的代码无法继续执行wrapInner调用。可能发生错误,因为代码假定它只会运行一次。最简单的解决方案可能是在包装之前从内容中删除任何script元素:

$("table > tbody > tr > td[width='600']").find('script')
  .remove()
.end().wrapInner("<div id='content_cont' />");