2010-08-05 8 views
0

저는 현재 만들고있는 웹 사이트의 캘린더 응용 프로그램을 만들었으며 javascript로 div 요소를 제거하려고합니다.
iFrame Javascript div 요소 자식 제거


이 -------------------
* 달력 페이지가로드
*이 이벤트에 사용자가 클릭
* 이벤트가 함께 팝업을 맡은 프로세스 컨테이너 사업부의 ID를 전달 Fancybox 창 및 이벤트 사업부의 ID
* 사용자가 클릭 제거 사업부는 (달력 이벤트 DIV)를 지정 * 이벤트

내가 사용 자바 스크립트 코드는 제거 될 예정이다 :

<script language="javascript" type="text/javascript"> 
    function btnClick(container, objID) { 
     removeElement(container, objID); 
     parent.$.fancybox.close(); 
    } 
    function removeElement(par, div) { 
     var d1 = parent.document.getElementById(par); 
     var d2 = parent.document.getElementById(div); 

     d1.removeChild(d2); // The Problem Line DOM 8 Not Found Exception 
    } 
</script> 

경고를 사용하면 d1과 d2가 발견되지만 자식 노드가 제거되면 DOM 8 예외가 발생합니다. 이 기능을 작동시키는 방법을 알려주세요.

편집 : 나는 ASP.Net을 사용하고 그래서이 코드는 Page_Load

if(Request.QueryString["Container"] != null) 
    lnkDelete.Attributes.Add("onclick", "btnClick(\"" + 
     Request.QueryString["Container"].ToString() + "\",\"" + 
     Request.QueryString["Control"].ToString() + "\");"); 

에서 실행 그래서 기본적으로 그냥 제거 이벤트 링크 버튼에 btnClick 기능을 추가합니다. 이벤트가 실행되지 않고 요소가 발견되었으므로 부모 요소에서 자식 요소가 제거되지 않습니다.

+0

어떤 브라우저에서 해당 오류 메시지를 받았습니까? 다른 것을 시도해 볼 수 있습니까? –

+0

크롬 (내장 자바 스크립트 디버거) 및 Firefox (파이어 버그) – GambitSunob

+0

모두에서 같은 오류가 발생합니다. 그리고 어떤 브라우저 (IE, Firefox, Chrome, Safari)에서도 작동하지 않습니다. 예제 페이지를 곧 작성하려고합니다. 현재 사이트는 외부에 액세스 할 수 없습니다. – GambitSunob

답변

1

제공된 링크에서 함수 호출을 추적하려고했습니다.

d1.id = "cal_DayContent4" 
d2.id = "calendarID4" 

그런 다음 함수가 :

d1.removeChild(d2); 

를하지만의는 DOM을 살펴 보자 : 당신이 보여주는 것처럼, 모두 d1d2는 예를 들어, 정의, 내가 가지고

<div id="cal_DayContent4" class="cal_DayContent"> 
    <div class="cal_DayNumber">5</div> 
    <div class="calendarg-Party"> 
     <div id="calendarID4" class="calendar-Calendar"> 
      … 
     </div> 
    </div> 
</div> 

로 이 경우 d2d1의 직계 자녀는 아니지만 divcalendarg-Party입니다. 이 div 항상 d1의 두 번째 자식 인 경우

d1.childNodes[1].removeChild(d2); 

처럼 뭔가를 할 수 올바른 노드는 삭제됩니다.


그냥 측 노드 : 나는 더 주위 비트를 보면서 같은 코드 (삽입 들여 쓰기) 발견 :이 일부 ASP.NET 일 작성한 것으로 의심

(function (evt) { 
    with (this.ownerDocument ? this.ownerDocument : {}) { 
     with (this.form ? this.form : {}) { 
      with (this) { 
       return (function(evt){ 
        btnClick("cal_DayContent4","calendarID4"); 
       }).call(this, evt); 
      } 
     } 
    } 
}) 

(I '는 돈을 ASP.NET에 대해서는 아무 것도 모른다.) 그러나 이것은 정말로 나쁘다. with 문은 JavaScript에서 나쁜 습관으로 간주되며 with reason입니다. 이렇게하면 여기에서 무슨 일이 일어나는지 이해하기가 어렵습니다.


BTW2, JavaScript에서 작은 따옴표와 큰 따옴표를 안전하게 교환 할 수 있다는 것을 알고 계셨습니까?즉,

과 같이 코드를 작성할 수도 있습니다. 이는 쉽게 읽을 수 있습니다.


UPDATE : 나는 그것을 실현 동안 전혀 필요 함수 removeElementd1의 ID를 전송하지 않는 것입니다 후.

d2.parentNode.removeChild(d2); 

을 할 (당신은 항상 d1의 두 번째 노드 인 부모 노드의 의존하지있는 한, 더 강력한) 대신에 내가 위에서 쓴 무엇, 그것이 궁금 나에게 잎있는 쉽습니다 : why does removeChild need a parent node?

+0

완벽하게 작동했습니다. 나는 그것이 직접적인 아이가되어야한다는 것을 깨닫지 못했고, 나는 그것이 모든 아이들의 아이들을 통해 스캔 될 것이라고 생각했다. 요소를 찾으려면. 나는 작은 따옴표를 확실히 좋아한다. 훨씬 더 쉽다. :) 정말 고마워요! – GambitSunob