jqzoom错误:找不到节点

时间:2012-02-14 12:58:51

标签: jquery wordpress jqzoom

尝试追踪错误的图像替换错误。一个不同大小的图像弹出原始的img源。

不幸的是,在我的电脑上,无论浏览器(Firefox,Chrome,safari),错误都是“无声”,并且不会导致问题。

然而,使用firebug和chrome工具跟踪它似乎表明这是因为Firefox中的“找不到节点”错误(chrome:“NOT_FOUND_ERR:DOM异常8”)

这应该是来自jigoshop的所有标准代码,一个WordPress插件。这可能是因为无论谁将图像放在首位,都不了解图像尺寸的关系。

无论如何,它在这里打破:

document.body.removeChild(this.node);

此处约有13行(jquery.jqzoom-core.js中的第653行)

this.fetchdata = function () {
var image = $(this.node);
var scale = {};
this.node.style.display = 'block';
$obj.w = image.width();
$obj.h = image.height();
$obj.pos = image.offset();
$obj.pos.l = image.offset().left;
$obj.pos.t = image.offset().top;
$obj.pos.r = $obj.w + $obj.pos.l;
$obj.pos.b = $obj.h + $obj.pos.t;
scale.x = ($obj.w / smallimage.w);
scale.y = ($obj.h / smallimage.h);
el.scale = scale;
document.body.removeChild(this.node);
$('.zoomWrapperImage', el).empty().append(this.node);
//setting lens dimensions;
lens.setdimensions();
};

它找不到的节点是:,这是在加载html后找到的:

<div class="zoomWrapperImage" style="width: 100%; height: 496px;">
<img style="position: absolute; border: 0px none; display: block; left: -5000px; top: 0px;" src="http://xyz.com/shop/wp-content/uploads/2011/10/go-291x496.jpg">consoleName="jQuery.data"consoleKind="Element"consoleFramework="jQueryUI-1"consoleId="73"
</div>

我已经深入研究了jquery。所以,2个问题:

  1. 如何解决这个确切的问题?
  2. 解决这些类型错误的一般过程是什么?

4 个答案:

答案 0 :(得分:3)

我找到了解决方法。不过,我不会称之为正确的解决方案。解决方法是:

  1. 将以下内容添加到jquery.zqzoom.core.js的顶部(从一些被遗忘的来源找到的功能):

    function isInDocument(el){     var html = document.body.parentNode;     而(el){         if(el === html){             返回true;         }         el = el.parentNode;     }     返回false; }

  2. 在第665行,就在之前:

    document.body.removeChild(this.node);

  3. 添加:

    if(isInDocument(this.node))
    

    这将停止发生异常并允许脚本继续。

答案 1 :(得分:0)

这并没有解决我的问题。 但更换

document.body.removeChild(this.node);

使用:

this.node.parentNode.removeChild(this.node);

解决了我的问题,不确定这是否是正确的方法。

答案 2 :(得分:0)

removeChild()函数要求您引用要删除的节点的父节点。 Document.body不是您要删除的父节点。因此,您必须获取节点的父节点并在removeChild()

中使用它
*parentnode*.removeChild(*node trying to remove*);

答案 3 :(得分:0)

使用最新版本的jqzoom。你可以find it on github