Javascript代码在IE中表现正常,在firefox中表现不正常

Javascript代码在IE中表现正常,在firefox中表现不正常,javascript,Javascript,我需要一个关于我的错误的澄清 我的要求是使用javascript动态获取UI中使用的html标记名。我的代码在IE中执行,但在Mozila Firefox中不合适。 我的代码 HTML代码: <table> <tr> <td> <input type="text" /> </td> <td> <select> <option>p_st

我需要一个关于我的错误的澄清

我的要求是使用javascript动态获取UI中使用的html标记名。我的代码在IE中执行,但在Mozila Firefox中不合适。 我的代码

HTML代码:

<table>
  <tr>
    <td>
      <input type="text" />
    </td>
    <td>
      <select>
        <option>p_string1</option>
        <option>p_string5</option>
      </select>
    </td>
   </tr>
</table>

p_string1
p_string5
JS:

for(i=0;i

我得到的是值
#text
,而不是标签名
Select
。但是正确地获取标记名
INPUT

我认为这是因为firefox(正确地)选择了第一个子节点,即空格。如果删除和之间的所有空白,可能会得到正确的标记

编辑,如下所示:

<td><input

希望这有帮助。

使用标记名和firstChild元素属性:

var cells=table.getElementsByTagName('td');
对于(i=0;i
请注意,有些浏览器注意到换行和制表是作为TextNodes,没有标记名,因为我们在childnodes中循环搜索定义的标记名属性。
我更新了位于

的示例,如果您可以修改标记,则最好通过ID而不是td childnodes引用对象。我建议在输入上添加一个id,然后引用thatya,但我是用泛型编写代码的,因为实际的问题是使用用户在UI中定义的表的默认格式向现有表追加一个新行。。因此,一般来说,我更喜欢获取特定表的'td'标记的childnodes,而不是使用'id'<代码>表.getElementsByTagName('td')[i].childNodes[0]。标记名
也不工作。。“#text”在这种情况下意味着什么?不客气,如果你不介意的话,我会给出一个更完整的答案…:)但是,我只是缩进html标记,没有其他额外的空格。。它是否也会产生同样的问题..由于@Exelian comments text节点可能会导致结果错误,我在更新了我的解决方案
<td><input
var inner_tags = document.querySelectorAll('td > *')
var first_tag = inner_tags[0].tagName;
var cells = table.getElementsByTagName('td');
for (i = 0; i < table.rows[0].cells.length; i++) 
{ 
  var cell = cells[i];
  if ( cell && cell.firstChild) {
      result = null;
      for ( position in cell.childNodes){
          if (! result) result = cell.childNodes[position].tagName;
      } 
      pNode[i] = result;
  }
}