新手:表上的removeChild()什么都不做 [英] newbie: removeChild() on table does nothing

查看:51
本文介绍了新手:表上的removeChild()什么都不做的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,

在index.html页面上我有一个id =" property_fields"的表格。


< table id =" property_fields" ;名称= QUOT; property_fields" border =" 0">


它包含具有以下ID的行集:


var propertyRows = new Array(

" region_row"," town_row"," district_row"," address_row"," house_row"," floor_no_row"," rooms_row"," floors_row"," area_row" ,year_built_row,

owner_row,standard_row,garrage_row,parking_row,kitchen_row,balcony_row,gas_row, ; media_row","equipment_row"," guard_row",

" building_type_row"," picture1_row"," picture2_row"," picture3_row"," property_remarks_row"

);


如果不需要,我想删除行 - 这取决于

estate_type控件的选择:


for(var r = 0; r< propertyRows.le NGTH; r ++)

{

if(visibility [document.announcement.estate_type.selectedIndex] [r] == 0)

{

var theRow = document.getElementById(''property_fields'')。rows [r + 1];

document.getElementById(''property_fields'')。removeC hild(theRow) ; //这里

问题:没有什么事情发生

}

}


(有'二维表称为可见性。


问题是removeChilds()什么都不做,没有视觉效果。

我在Linux中使用FireFox。

请帮忙。在此先感谢。

/ RAM /

Hello,
On index.html page I have a table with id="property_fields".

<table id="property_fields" name="property_fields" border="0">

It contains set of rows with the following IDs:

var propertyRows = new Array(
"region_row", "town_row", "district_row", "address_row", "house_row", "floor_no_row", "rooms_row", "floors_row", "area_row", "year_built_row",
"ownership_row", "standard_row", "garrage_row", "parking_row", "kitchen_row", "balcony_row", "gas_row", "media_row", "equipment_row", "guard_row",
"building_type_row", "picture1_row", "picture2_row", "picture3_row", "property_remarks_row"
);

I want to remove row if it is not required - it depends on the selection of
estate_type control:

for (var r = 0; r < propertyRows.length; r++)
{
if (visibility[document.announcement.estate_type.selectedIndex][r] == 0)
{
var theRow = document.getElementById(''property_fields'').rows[r + 1];
document.getElementById(''property_fields'').removeC hild(theRow); // HERE
PROBLEM: nothing happends
}
}

(there''s 2-dimensional table called visibility).

The problem is that removeChilds() does nothing, there is no visual effect.
I use FireFox in Linux.
Please help. Thanks in advance.
/RAM/

推荐答案

7月1日下午3:38,r_ahims ... @ poczta.onet.pl写道:
On Jul 1, 3:38 pm, r_ahims...@poczta.onet.pl wrote:

在index.html页面上我有一个id =" property_fields"的表格。


< table id =" property_fields"名称= QUOT; property_fields"边界=" 0">
On index.html page I have a table with id="property_fields".

<table id="property_fields" name="property_fields" border="0">



< snip>

<snip>


var theRow = document.getElementById(''property_fields'')。rows [r + 1];

document.getElementById(' 'property_fields'')。removeC hild(theRow);

// HERE PROBLEM:没有任何事情发生
var theRow = document.getElementById(''property_fields'').rows[r + 1];
document.getElementById(''property_fields'').removeC hild(theRow);
// HERE PROBLEM: nothing happends



在HTML文档/ DOM中TR元素不是TABLE元素的子元素

(尽管在XHTML文档/ DOM中它们可能是),而是孩子

(可能暗示)TBODY,THEAD或TFOOT元素,所以你的 - theRow

- 不是你要调用的元素的子元素 - removeChild

- 因此方法调用无效。一个相对简单的修复方法是调用元素

的 - removeChild - 方法,即 - theRow - 的 - parentNode - 。 IE: -


theRow.parentNode.removeChild(theRow);

In HTML documents/DOMs TR elements are not children of TABLE elements
(though in XHTML documents/DOMs they may be) but rather the children
of (possibly implied) TBODY, THEAD or TFOOT elements, so your - theRow
- is not a child of the element on which you are calling - removeChild
- and as a result the method call is non-effective. A relatively
simple fix would be to call the - removeChild - method of the element
that was the - parentNode - of - theRow -. I.E:-

theRow.parentNode.removeChild(theRow);


r _ ******** @ poczta.onet.pl 写道:

在index.html页面上,我有一个id =" property_fields"的表格。


< table id =" property_fields"名称= QUOT; property_fields"边界=" 0">
On index.html page I have a table with id="property_fields".

<table id="property_fields" name="property_fields" border="0">



`table''元素没有'name''属性。

`table'' elements don''t have a `name'' attribute.


It包含具有以下ID的行集:


var propertyRows = new Array(

" region_row"," town_row"," district_row", address_row,floor_row,floor_no_row,rooms_row,floors_row,area_row,year_built_row,

ownership_row, standard_row"," garrage_row"," parking_row"," kitchen_row"," balcony_row"," gas_row"," media_row"," equipment_row"," guard_row",

building_type_row,picture1_row,picture2_row,picture3_row,property_remarks_row

);


如果不需要,我想删除行 - 这取决于

estate_type控件的选择:


for(var r = 0; r< propertyRows.length; r ++)

{

if(visibility [document.announcement.estate_type.selectedIndex] [r] == 0)

{

var theRow = document.getElementById(''property_fields'')。rows [r + 1];

document.getElementById(''property_fields'')。removeC hild(theRow) ; //这里

问题:没有什么事情发生

}

}


(有' 2维表称为可见性。


问题是removeChilds()什么都不做,没有视觉效果。
It contains set of rows with the following IDs:

var propertyRows = new Array(
"region_row", "town_row", "district_row", "address_row", "house_row", "floor_no_row", "rooms_row", "floors_row", "area_row", "year_built_row",
"ownership_row", "standard_row", "garrage_row", "parking_row", "kitchen_row", "balcony_row", "gas_row", "media_row", "equipment_row", "guard_row",
"building_type_row", "picture1_row", "picture2_row", "picture3_row", "property_remarks_row"
);

I want to remove row if it is not required - it depends on the selection of
estate_type control:

for (var r = 0; r < propertyRows.length; r++)
{
if (visibility[document.announcement.estate_type.selectedIndex][r] == 0)
{
var theRow = document.getElementById(''property_fields'').rows[r + 1];
document.getElementById(''property_fields'').removeC hild(theRow); // HERE
PROBLEM: nothing happends
}
}

(there''s 2-dimensional table called visibility).

The problem is that removeChilds() does nothing, there is no visual effect.



取决于你如何定义它。错误控制台中有一个例外。

Depends on how you define that. There is an exception in the Error Console.


我在Linux中使用FireFox。
I use FireFox in Linux.



'tr''元素是'tbody'元素的子元素,而不是'table''

元素的子元素,并且重复的参考查找是低效的。


var sel = document.forms [" announcement"]。elements [" estate_type"];

var selIdx = sel.selectedIndex;

if(selIdx -1)

{

var table = document.getElementById(''property_fields'');

if(table)

{

var tbody =(table.tBodies || [null])[0];

if(tbody)

{

for(var r = propertyRows.length; r--;)

{

if(visibility [selIdx] [r] == 0)

{

var theRow = tbody.rows [r + 1];

tbody.removeChild(theRow);

}

}

}

} < br $>
}


我认为`r + 1''是因为你希望表头保持不变。如果你想要
put那行成为'thead''元素,其余为exp合法地在'tbody''

元素(总是在那里),你可以使用`r''。


你应该使用两个或四个取而代之的是缩进空间。

PointedEars

-

现实主义:HTML 4.01严格

福音:XHTML 1.0 Strict

疯狂:XHTML 1.1作为应用程序/ xhtml + xml

- Bjoern Hoehrmann

The `tr'' element is the child of a `tbody'' element, not of the `table''
element, and repeated reference lookup is inefficient.

var sel = document.forms["announcement"].elements["estate_type"];
var selIdx = sel.selectedIndex;
if (selIdx -1)
{
var table = document.getElementById(''property_fields'');
if (table)
{
var tbody = (table.tBodies || [null])[0];
if (tbody)
{
for (var r = propertyRows.length; r--;)
{
if (visibility[selIdx][r] == 0)
{
var theRow = tbody.rows[r + 1];
tbody.removeChild(theRow);
}
}
}
}
}

I presume `r + 1'' is because you want the table header to stay in. If you
put that row into a `thead'' element and the rest explicitly in the `tbody''
element (that is always there), you can use `r'' instead.

You should use two or four spaces for indentation instead.
PointedEars
--
realism: HTML 4.01 Strict
evangelism: XHTML 1.0 Strict
madness: XHTML 1.1 as application/xhtml+xml
-- Bjoern Hoehrmann


Henry写于01 jul 2008年在comp.lang.javascript
Henry wrote on 01 jul 2008 in comp.lang.javascript:

>

theRow.parentNode.removeChild(theRow);
>
theRow.parentNode.removeChild(theRow);



为什么这个奇怪的双重方式指定?


孩子只能是孩子的'这个无性DOM世界中的父母,



我们可以忘记.removeChild()

如果我们有下面的函数removeElement()?

函数removeElement(x){

x.parentNode.removeChild(x);

} ;


=============================


因此:


函数removeElementById(x){

x = document.getElementById(x);

x .parentNode.removeChild(x);

};


未经测试!!!

-

Evertjan。

荷兰。

(请在我的电子邮件地址中将x'变为点数)

Why is this spec-ed in this strange double way?

A child can only be a child of it''s parent,
in this asexual DOM world?

Could we forget about .removeChild()
if we have the below function removeElement()?

function removeElement(x) {
x.parentNode.removeChild(x);
};

=============================

and consequently:

function removeElementById(x) {
x = document.getElementById(x);
x.parentNode.removeChild(x);
};

Not tested!!!
--
Evertjan.
The Netherlands.
(Please change the x''es to dots in my emailaddress)


这篇关于新手:表上的removeChild()什么都不做的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆