叛逆达人
小狐狸
小狐狸
  • UID24403
  • 注册日期2008-06-02
  • 最后登录2008-06-02
  • 发帖数4
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:9151回复:7

如何彻底删除HTML控件?

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

这使我非常苦恼,请问有什么彻底删除的方法?
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
1楼#
发布于:2008-06-02 13:45
创建element时不要使用var进行变量捕捉,让element附在global域上;
删除时,用delete element;操作。
叛逆达人
小狐狸
小狐狸
  • UID24403
  • 注册日期2008-06-02
  • 最后登录2008-06-02
  • 发帖数4
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2008-06-02 13:45
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>
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
3楼#
发布于:2008-06-02 13:45
你可以这样,
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);
}
叛逆达人
小狐狸
小狐狸
  • UID24403
  • 注册日期2008-06-02
  • 最后登录2008-06-02
  • 发帖数4
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2008-06-02 13:45
还是不行哦。
你点“创建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>
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
5楼#
发布于:2008-06-02 13:45
不清楚为什么会这样,像是一个bug。  所以如果想检测一个元素是否存在,建议还是用document.getElementById()的方法。
叛逆达人
小狐狸
小狐狸
  • UID24403
  • 注册日期2008-06-02
  • 最后登录2008-06-02
  • 发帖数4
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
6楼#
发布于:2008-06-02 13:45
天呐,FireFox怎么这样啊,为什么不改改呢?
苹果的Safari也是这样~~~
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
7楼#
发布于:2008-06-02 13:45
老实说,document.form1.input1这种方式能够在firefox上运行已经让我很奇怪了。  我印象里,这种情况应该总是要报错了。
游客

返回顶部