iFrame Javascript删除div子元素

iFrame Javascript删除div子元素,javascript,fancybox,Javascript,Fancybox,我已经为我正在构建的网站创建了一个日历应用程序,并试图用javascript删除一个div元素。 过程 ------------------- *日历页面加载 *用户单击事件 *事件弹出一个Fancybox窗口,该窗口传递容器Div ID和事件Div ID *用户单击删除事件 *应该删除指定的div(日历事件div) 我使用的javascript代码是: <script language="javascript" type="text/javascript"> functio

我已经为我正在构建的网站创建了一个日历应用程序,并试图用javascript删除一个div元素。

过程
-------------------
*日历页面加载
*用户单击事件
*事件弹出一个Fancybox窗口,该窗口传递容器Div ID和事件Div ID
*用户单击删除事件
*应该删除指定的div(日历事件div)

我使用的javascript代码是:

<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>
因此,它基本上只是将
btnClick
函数添加到Remove Event link按钮。
事件确实触发,元素被找到,只是它不会从父文档中删除子元素。

从您提供的链接中,我尝试跟踪函数调用。如您所示,定义了
d1
d2
,例如,我得到:

d1.id = "cal_DayContent4"
d2.id = "calendarID4"
然后,您的函数执行以下操作:

d1.removeChild(d2);
但让我们看看DOM:

<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>
将删除正确的节点


只是一个侧节点:我进一步查看,发现如下代码(插入缩进):

我怀疑这是由ASP.NET编写的(我对ASP.NET一无所知),但这真的很糟糕。在JavaScript中,
with
语句被认为是不好的做法,并且。这样,很难理解这里发生了什么


顺便问一下,你知道你可以在JavaScript中安全地交换单引号和双引号吗?这意味着您也可以像这样编写代码

if(Request.QueryString["Container"] != null)
    lnkDelete.Attributes.Add("onclick", 'btnClick("' + 
      Request.QueryString["Container"].ToString() + '","' + 
      Request.QueryString["Control"].ToString() + '");');
依我看,这更容易阅读


更新:过了一会儿,我意识到根本不需要将
d1
的ID发送到您的函数
removeElement
。与我上面写的内容不同,它更容易(也更健壮,因为您不依赖父节点总是
d1
的第二个节点)


这让我想知道:

您是在哪个浏览器中收到该错误消息的?你能试试另一个吗?在Chrome(内置javascript调试器)和Firefox(Firebug)中,我都遇到了相同的错误。而且它在任何浏览器(如Firefox、Chrome、Safari)中都不起作用。我将尝试在短期内提供一个示例页面,外部无法访问当前站点。这非常有效。我没有意识到它必须是一个直接的孩子,我以为它会扫描所有孩子的孩子。找到元素。我当然喜欢单引号,比\“s”简单得多。:)非常感谢!
d1.childNodes[1].removeChild(d2);
(function (evt) {
    with (this.ownerDocument ? this.ownerDocument : {}) {
        with (this.form ? this.form : {}) {
            with (this) {
                return (function(evt){
                    btnClick("cal_DayContent4","calendarID4");
                }).call(this, evt);
            }
        }
    }
})
if(Request.QueryString["Container"] != null)
    lnkDelete.Attributes.Add("onclick", 'btnClick("' + 
      Request.QueryString["Container"].ToString() + '","' + 
      Request.QueryString["Control"].ToString() + '");');
d2.parentNode.removeChild(d2);