childNodes在Firefox和Chrome中不起作用,但在IE中工作

时间:2010-01-28 13:32:29

标签: javascript firefox dom google-chrome internet-explorer

我的第3个单元格中有一个gridview,有文本框控件,我在onchange上调用了javascript函数。

有些人可以告诉我为什么这在Firefox和Chrome中不起作用,但在IE中工作

grd.rows[rowindex].cells[3].childNodes[0].value

它在IE中返回正确的值,但在Chrome和firefox(In FF and Chrome it return undefined)中没有?

还请建议我解决这个问题。

修改

alert(grd.rows[ri].cells[3].childNodes[0].value);//IE value=correct value, FF and chrome value=undfined
alert(grd.rows[ri].cells[3].childNodes[1].value);//IE value=undfined, FF and Chrome value= correct value

由于

9 个答案:

答案 0 :(得分:3)

我认为这是因为IE忽略了仅包含换行符和制表符的文本节点。我个人更喜欢被忽略,但我宁愿在浏览器中保持一致。

<p><!-- This comment represents a text node.
    --><em>text</em>
</p>

答案 1 :(得分:2)

试 grd.rows [rowIndex位置] .cells [3] .childNodes [1]。价值

或者最好,请查看集成开发人员工具中的表格

答案 2 :(得分:1)

@ChaosPandion:

嘿朋友不要对childNodes使用这种类型的检查。

childNodes的计数有所不同。有些浏览器包含空textNodes,有些则没有。在我认为你正在描述的这种操作中,最好使用父的getElementsByTagName()方法。这样,您正在寻找的每个孩子的儿童数量和指数将保持一致。

OR

只需查看浏览器的名称即可。

如果它是IE,那么它忽略了空的textnode,其中的childNode比其他浏览器少一个数字。

例如。

var isIE = navigator.appName;
if (isIE == "Microsoft Internet Explorer") {                
    var removeProductID = document.getElementById(obj.childNodes[0].id).getAttribute("abc");
}
else {
    var removeProductID = document.getElementById(obj.childNodes[1].id).getAttribute("abc");
}

希望这会有所帮助。享受编码。

答案 3 :(得分:1)

试试这个。我有同样的问题,这个问题只需更换&#34; childNodes&#34;与孩子们一起#34;

alert(grd.rows[ri].cells[3].children[0].value);

答案 4 :(得分:1)

Ishwar将孩子的节点更改为孩子的答案为我工作。

答案 5 :(得分:0)

如果您正在寻找文本,请为非IE浏览器使用grd.rows [rowindex] .cells [3] .childNodes [0] .data。

获取元素节点的文本值

var oCell = grd.rows[rowindex].cells[3];
alert(oCell.textContent || oCell.innerText)

获取文本节点的文本值(与以前相比安全性较低)

var oText = grd.rows[rowindex].cells[3].childNodes[0];
alert(oCell.data || oCell.value)

答案 6 :(得分:0)

正如ChaosPandion所说,IE忽略了空白文本节点。以下应该跨浏览器工作:

var cell = grd.rows[rowindex].cells[3];
for (var textbox=cell.firstChild; textbox.nodeType!==1; textbox=textbox.nextSibling);
alert(textbox.value);

但是,你说你在onchange上调用该函数。 据推测,这意味着有问题的文本框的onchange事件。 在这种情况下,事件处理程序中的event参数应该有一个指向文本框的指针。 查看target或srcElement属性。例如

function onChange(e) {
 e = e || window.event;
 var textbox = e.target || e.srcElement;
 alert(textbox.value);
}

答案 7 :(得分:0)

尝试getElementsByTagName()而不是ChildNodes。它也适用于FF,Chrome和IE。

答案 8 :(得分:0)

使用children[0]代替ChildNode,如下所示:

var oText = grd.rows[rowindex].cells[3].children[0];
相关问题