javascript 子节点在Firefox和Chrome中无法工作,但在IE中可以工作

bvuwiixz  于 2023-02-02  发布在  Java
关注(0)|答案(7)|浏览(155)

我有一个网格视图在它的第三个单元格,有文本框控件,我正在调用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

谢谢

omqzjyyz

omqzjyyz1#

我相信这是因为IE忽略了只包含换行符和制表符的文本节点。我个人更喜欢忽略它们,但我宁愿在浏览器之间保持一致性。

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

ezykj2lf2#

试试这个。我有同样的问题,这个问题解决了,只是取代“childNode”与“children”

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

cld4siwp3#

尝试

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

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

5jvtdoz2

5jvtdoz24#

@混沌潘迪翁:
嘿,朋友,不要对子节点使用这种类型的检查。
childNode的计数方法各不相同。有些浏览器包含空textNode,有些则没有。在这类操作中,我相信您正在描述的,最好使用父节点的getElementsByTagName()方法。这样,子节点的数量和您要查找的每个子节点的索引将保持一致。

请检查浏览器的名称。
如果它是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");
}

希望这对你有帮助,享受编码吧。

khbbv19g

khbbv19g5#

如果您正在查找文本,对于非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)
ckx4rj1h

ckx4rj1h6#

正如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事件,在这种情况下,你的事件处理程序中的事件参数应该有一个指向文本框的指针,看看target或srcElement属性。

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

bkhjykvo7#

尝试getElementsByTagName()而不是ChildNodes。它将为FF、Chrome和IE工作。

相关问题