如何彻底删除HTML控件?

阅读:9180回复:7
2008-06-02 13:45
写私信
楼主#
element是一个input对象,
用element.parentNode.removeChild(element)移除对象可行。
但是如果之前访问过此对象,即使移除这个对象,但它并非真正移除,
还寄存在内存里,用alert(element)显示“[object HTMLInputElement]”

这使我非常苦恼,请问有什么彻底删除的方法?
2008-06-02 13:45
写私信
1楼#
创建element时不要使用var进行变量捕捉,让element附在global域上;
删除时,用delete element;操作。
2008-06-02 13:45
写私信
2楼#
wushi777:创建element时不要使用var进行变量捕捉,让element附在global域上;
删除时,用delete element;操作。
回到原帖

不好意思,我看得不太懂,我把代码贴上来,请问如何改进?
<script language="javascript">
function appendElement()
{
var o = document.createElement("DIV");
o.innerHTML = '新增加的Text:<input type="text" name="input1" value="input1">';
document.getElementById('div').appendChild(o);
}
function readElement()
{
var element = document.form1.input1;
if(element)
alert(element.value);
}
function deleteElement()
{
var element = document.form1.input1;
if(element)
element.parentNode.removeChild(element);
}
</script>
<form name="form1">
<div id='div'></div>
<input type="button" value="创建input1" onclick="appendElement();">
<input type="button" value="访问input1" onclick="readElement();">
<input type="button" value="删除input1" onclick="deleteElement();"><BR>
如果对象在delete之前被访问过,它就会寄存在内存里,即使删除,还能访问。
请用FireFox测试。<BR>
如何彻底删除?
</form>
2008-06-02 13:45
写私信
3楼#
你可以这样,
function deleteElement()
{
if(document.form1.input1)
document.form1.input1.parentNode.removeChild(
document.form1.input1);
}


或者,

function readElement()
{
element = document.form1.input1;//不要用var element;
if(element)
element.parentNode.removeChild(element);

alert(delete element);
}
2008-06-02 13:45
写私信
4楼#
还是不行哦。
你点“创建input1”
再点“访问input1”
再点“删除input1”
再点“访问input1”试试  


<script language="javascript">
function appendElement()
{
	var o = document.createElement("DIV");
	o.innerHTML = '新增加的Text:<input type="text" name="input1" value="input1" isDelete="0">';
	document.getElementById('div').appendChild(o);
}
function readElement()
{
	element = document.form1.input1;
	if(element)
		alert("value="+element.value);
	delete element;
}
function deleteElement()
{
	if(document.form1.input1) {
	document.form1.input1.parentNode.removeChild(document.form1.input1);
	}
}
</script>
<form name="form1">
<div id='div'></div>
<input type="button" value="创建input1" onclick="appendElement();">
<input type="button" value="访问input1" onclick="readElement();">
<input type="button" value="删除input1" onclick="deleteElement();">
</form>
2008-06-02 13:45
写私信
5楼#
不清楚为什么会这样,像是一个bug。  所以如果想检测一个元素是否存在,建议还是用document.getElementById()的方法。
2008-06-02 13:45
写私信
6楼#
天呐,FireFox怎么这样啊,为什么不改改呢?
苹果的Safari也是这样~~~
2008-06-02 13:45
写私信
7楼#
老实说,document.form1.input1这种方式能够在firefox上运行已经让我很奇怪了。  我印象里,这种情况应该总是要报错了。