IE v. FF: действительно ли table.tBodies [0]? - PullRequest
2 голосов
/ 29 сентября 2010

Из того, что я понял, tBodies [0], похоже, работает в IE, но не в FF. Это ошибка IE? Я создал небольшой файл, чтобы продемонстрировать несоответствие, и я хотел бы знать, как лучше всего это сделать.

HTML:

<html>
<body>
 <table id="dataGrid">
 </table>
 <input type="button" onclick="insertRow();" value="New row">
</body>
</html>

Этот скрипт должен добавлять строку при каждом нажатии кнопки. Это работает в IE, но ломается в Firefox:

<script type="text/javascript" src="/costplan/script/prototype.js"></script>
<script>    
function insertRow(){
 var objTbl = $('dataGrid').tBodies[0]; 
 lastRow = objTbl.rows.length;
 alert(lastRow);
 var newRow = objTbl.insertRow(lastRow);
}
</script>

Является ли tBodies [0] недействительным? Я не уверен, почему, но этот код работает как в FF, так и в IE:

<script type="text/javascript" src="/costplan/script/prototype.js"></script>
<script>
function insertRow(){
 var objTbl = $('dataGrid');
 lastRow = objTbl.rows.length;
 alert(lastRow);
 var newRow = objTbl.insertRow(lastRow);
}    
</script>

Являются ли эти функции правильными? По сути, я не знаю, что происходит (я понимаю, что по крайней мере один из этих сценариев недействителен, но я не знаю, какой или почему).

1 Ответ

4 голосов
/ 29 сентября 2010

Свойство tBodies является частью стандарта DOM Level 2, и оно работает в обоих браузерах.

Разница заключается в том, что IE всегда внедряет элемент TBODY как дочерний элемент вашей пустой таблицы.

Firefox, Chrome и другие браузеры не делают этого, если элемент пуст, если элемент TABLEимеет по крайней мере один TR или TH, они неявно создадут TBODY.

Вы можете добавить элемент TBODY самостоятельно, и ваш пример будет работать безпроблемы:

<table id="dataGrid">
  <tbody>
  </tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...