0

我需要澄清我的错误。

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

HTML 代码:

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

JS:

for (i = 0; i < table.rows[0].cells.length; i++) 
{
  pNode[i] = table.getElementsByTagName('td')[i].childNodes[0].nodeName;
}

我得到的是 value#text而不是 tag name Select。但是正确获取标记INPUT名..

4

2 回答 2

2

我认为这是因为firefox(正确地)选择了第一个childNode,它是空格。如果删除 the 和 the 之间的所有空格,您可能会得到正确的标签。

编辑,像这样:

<td><input

我创建了一些 jsFiddles 来演示效果:

http://jsfiddle.net/NUEwg/2/

http://jsfiddle.net/zbmeG/1/

编辑2:

您可以考虑使用document.querySelectorAll. 除 IE6 和 IE7 之外的所有浏览器都支持此功能。如果您不需要这些支持,则类似这样的方法可能会起作用。

var inner_tags = document.querySelectorAll('td > *')
var first_tag = inner_tags[0].tagName;

希望这可以帮助。

于 2013-06-19T08:33:19.817 回答
0

使用 tagName 和 firstChild 元素属性:

http://www.w3schools.com/jsref/prop_element_tagname.asp

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;
  }
}

请注意,某些浏览器会将行跳和制表视为没有标签名称的 TextNode,因为我们循环遍历子节点以搜索已定义的标签名称属性。我在http://jsfiddle.net/9YJsd/1/更新了示例

于 2013-06-19T08:33:48.103 回答