2012-02-14 2 views
0

잘못된 이미지 교체 오류를 추적하려고합니다. 다른 크기의 이미지가 원본 img 소스에 나타납니다.jqzoom 오류 : 노드를 찾을 수 없습니다.

불행히도, 내 PC에서 브라우저 (파이어 폭스, 크롬, 사파리)에 상관없이 오류는 '침묵'이며 문제가 발생하지 않습니다.

이 있어야한다

그러나 불을 지르고 크롬 도구를 추적,이 때문에 파이어 폭스의 '노드를 찾을 수 없습니다'오류 (: : "NOT_FOUND_ERR DOM 예외 8"크롬)의 것을 보여 것 같다 jigoshop의 모든 표준 코드, WordPress 플러그인. 처음에 이미지를 넣는 사람은 누구나 이미지 크기의 관계를 이해하지 못했기 때문일 수 있습니다. 어떤 경우

, 그것은 여기서 파괴된다

document.body.removeChild(this.node); 

약 13 선을 여기 (라인 653 jquery.jqzoom-core.js에서)

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(); 
}; 

노드는 불가능 find is :로드 된 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. 이러한 유형의 오류를 수정하는 일반적인 프로세스는 무엇입니까?

답변

3

해결 방법을 발견했습니다. 나는 그것을 올바른 해결책이라고 부르지 않을 것이다. 해결 방법은 다음과 같습니다

기능 isInDocument (엘) { var에 HTML = 문서 :

  1. 이 jquery.zqzoom.core.js의 상단 (일부 잊어 소스에서 발견 기능)에 다음을 추가합니다. body.parentNode; while (el) { if (el === html) { return true; } el = el.parentNode; } false를 반환합니다. } 라인 (665)에

  2. , 직전 :

    document.body.removeChild (this.node);

이 추가

if(isInDocument(this.node)) 

이 발생하지 예외를 중지하고 스크립트를 계속 할 수 있습니다.

+0

포인트 1은 첫눈에 반 논리적이지만 (두 번째도 마찬가지 임) 작동합니다. : D – Rolice

0

이 문제가 해결되지 않았습니다. 만에

document.body.removeChild(this.node); 

교체 :

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

내 문제, 그것을 할 수있는 올바른 방법이 있다면 정말 확실하지를 해결했다.

0

removeChild() 기능을 사용하려면 제거하려는 노드의 부모를 참조해야합니다. Document.body는 제거하려는 노드의 부모 노드가 아닙니다. 따라서 노드의 부모를 가져와 removeChild()에서 사용해야합니다.

*parentnode*.removeChild(*node trying to remove*); 
+0

설명해 주셔서 감사합니다. 그러나 더 큰 요점은 존재하지 않는 노드에서이 코드를 실행하는 jqzoom 코드가 왜 그런 것인가입니다. 문제는 자바 스크립트 나 jQuery보다 jqzoom에 관한 것입니다. – Jahmic

0

최신 버전의 jqzoom을 사용하십시오. 당신은 find it on github 일 수 있습니다.