iFrame Javascript删除div子元素
我已经为我正在构建的网站创建了一个日历应用程序,并试图用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
过程
-------------------
*日历页面加载
*用户单击事件
*事件弹出一个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);