0

私のバグに関する説明が必要です。

私の要件は、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>

JS:

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

#textタグ名の代わりに値を取得していますSelect。しかし、タグ名を適切に取得するINPUT..

4

2 に答える 2

2

これは、firefox が空白である最初の childNode を (正しく) 選択するためだと思います。と の間のすべての空白を削除すると、おそらく正しいタグが得られます。

次のように編集します。

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

一部のブラウザーでは、行のホップと集計が、tagName を持たない TextNode として認識されることに注意してください。これは、定義された tagName 属性を検索する子ノードを循環するためです。http://jsfiddle.net/9YJsd/1/の例を更新しました

于 2013-06-19T08:33:48.103 に答える