Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.07.2015, 00:22
Интересующийся
Отправить личное сообщение для S.E.K.T.O.R. Посмотреть профиль Найти все сообщения от S.E.K.T.O.R.
 
Регистрация: 09.07.2015
Сообщений: 15

Вставка строк в таблицу
Доброго времени суток!
Вопрос конечно избитый и не раз уже поднимался, но все таки...

Есть таблица
<table>
<tr>
	<td></td>
</tr>
<tbody id="mytestid">
</tbody>
<tr>
	<td></td>
</tr>
</table>


В TBODY с заданным ID требуется вставить строки. Количество строк неизвестно, формируется динамически. То есть, при нажатии кнопки выполняется AJAX запрос, который возвращает данные вида
<tr>
	<td></td>
</tr>
<tr>
	<td></td>
</tr>


Необходим кроссбраузерный вариант. Удалось решить задачу при помощи jQuery
$("#mytestid tr").remove();
$("#mytestid").append("<tr><td>...</td></tr><tr><td>...</td></tr>");

То есть, такой вариант работает нормально в IE, FF, Opera.
НО, в движке, под который пишу, в качестве фреймворка используется YUI 2.

Соответственно просьба к знатокам: помогите переписать вышепреведенный код, либо под чистый JS либо под YUI.

Заранее благодарен!
Ответить с цитированием
  #2 (permalink)  
Старый 10.07.2015, 01:13
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Я правильно понимаю, перед вставкой предыдущие элементы <tr> удаляются?

<!doctype html>
<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <style>
    table, td { border: 1px solid black; }
  </style>
</head>
<body>
  <table>
    <tr>
      <td>lalala</td>
    </tr>
    <tbody id="mytestid">
    </tbody>
    <tr>
      <td>lalala</td>
    </tr>
  </table>
  <button>Add cells</button>

  <script>
    var button = document.getElementsByTagName('button')[0],
        tbody = document.getElementById('mytestid');


    Element.prototype.remove = Element.prototype.remove || function() {
      if(this.parentNode) {
        this.parentNode.removeChild(this);
      }
    };

    function removeChildren(elem) {
      try {
        elem.innerHTML = '';
      } catch(e) {
        while(elem.firstChild) {
          elem.firstChild.remove();
        }
      }
    }

    button.onclick = function() {
      removeChildren(tbody);
      tbody.insertAdjacentHTML('afterBegin', '<tr><td>...</td></tr><tr><td>...</td></tr>');
    };
  </script>
</body>
</html>

Последний раз редактировалось Decode, 10.07.2015 в 02:12.
Ответить с цитированием
  #3 (permalink)  
Старый 10.07.2015, 01:37
Интересующийся
Отправить личное сообщение для S.E.K.T.O.R. Посмотреть профиль Найти все сообщения от S.E.K.T.O.R.
 
Регистрация: 09.07.2015
Сообщений: 15

Сообщение от Decode
Я правильно понимаю, перед вставкой предыдущие элементы <tr> удаляются?
Да, все верно. Получается некий аналог innerHTML.


К сожалению, ваш пример не работает в IE, ругается на
tbody.insertAdjacentHTML
говорит "Недопустимый конечный элемент для данного действия."
Ответить с цитированием
  #4 (permalink)  
Старый 10.07.2015, 01:49
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Странно, insertAdjacentHTML работает даже в старых IE. А какая у вас версия?
Ответить с цитированием
  #5 (permalink)  
Старый 10.07.2015, 02:06
Интересующийся
Отправить личное сообщение для S.E.K.T.O.R. Посмотреть профиль Найти все сообщения от S.E.K.T.O.R.
 
Регистрация: 09.07.2015
Сообщений: 15

Сообщение от Decode
А какая у вас версия?
IE 8

Последний раз редактировалось S.E.K.T.O.R., 10.07.2015 в 02:15.
Ответить с цитированием
  #6 (permalink)  
Старый 10.07.2015, 02:09
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

А что вы передаете вторым параметром в insertAdjacentHTML?
Ответить с цитированием
  #7 (permalink)  
Старый 10.07.2015, 02:18
Интересующийся
Отправить личное сообщение для S.E.K.T.O.R. Посмотреть профиль Найти все сообщения от S.E.K.T.O.R.
 
Регистрация: 09.07.2015
Сообщений: 15

Запускаю ваш пример AS IS. Нет, сам insertAdjacentHTML работает, заменил вставку tr-td на ul-li и все отработало без проблем. Думаю причина именно в элементах. IE упорно не хочет вставлять строки в tbody, хотя jQuery .append без проблем отрабатывает и строчки вставляются

Последний раз редактировалось S.E.K.T.O.R., 10.07.2015 в 02:29.
Ответить с цитированием
  #8 (permalink)  
Старый 10.07.2015, 02:41
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Попробуйте изменить функцию removeChildren.
function removeChildren(elem) {
    while(elem.firstChild) {
        elem.firstChild.remove();
    }
}
Ответить с цитированием
  #9 (permalink)  
Старый 10.07.2015, 02:52
Интересующийся
Отправить личное сообщение для S.E.K.T.O.R. Посмотреть профиль Найти все сообщения от S.E.K.T.O.R.
 
Регистрация: 09.07.2015
Сообщений: 15

Все равно не работает. Да и дело ведь не в удалении, а в вставке
Ответить с цитированием
  #10 (permalink)  
Старый 10.07.2015, 05:05
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от S.E.K.T.O.R.
Есть таблица
Что за бред? Не бывает таких таблиц.

Второе, откуда проблема? Или по-вашему этот код

tbody.innerHTML=data.innerHTML;

не сквозь-браузерный?

Кончайте изобретать атом водорода.

Последний раз редактировалось kostyanet, 10.07.2015 в 05:09.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление строк в таблицу и скрытие таблицы. III Общие вопросы Javascript 39 20.11.2015 10:05
вставка строк в таблицу taktak Общие вопросы Javascript 2 13.02.2015 11:22
Добавление строк в таблицу ded711 Общие вопросы Javascript 8 25.04.2014 08:23
Добавление строк в таблицу ded711 Общие вопросы Javascript 1 30.03.2014 16:52
Добавление строк в таблицу (JQuery) tiksi jQuery 2 16.05.2013 08:01