Pull to refresh

Comments 14

Можно же сделать empty, потом append :)
Конечно можно и так. Но тогда придётся навешивать ещё и события к каждому добавляемому объекту.

Для большей ясности немного усложнил пример. Здесь внутри ячейки кнопка, для которой назначено событие.
$('#id_tr').html('new action');

Простой пример когда требуется именно innerHTML

Нужно динамически изменить строку таблицы. Новые данные для вставки передаются аяксом, в виде готового HTML, с уже навешаными событиями с правильными параметрами. Конечно можно перадавить данные в json и потом разбирать их и делать всё через DOM с навешиванием событий и прочим.
Но не легче ли просто заменить содержимое innerHTML на то что к нам пришло? По моему легче. + универсальность. Т.к. в этом случае отпадает необходимость рисовать обработчик для встивки в DOM для каждого случая.
ну да — тегов не видно
$('#id_tr').html('<td><button onclick=«my_f(new_id)»>new action</button></td>');
Навесте обработчик на саму таблицу и смотрите на какую строку человек кликнул, а организовать хранение данных так, что бы до них было легко добраться и запустить событие с правильными параметрами — дело техники.
Странно, а мне наоборот работа через DOM кажется более правильной и логичной. Благо jquery позволяет через селекторы найти все что нужно с любой стороны
Этой весной столкнулся с такой же проблемой и пробовал решать ее через DOM. Во всех браузерах кроме IE работало нормально. Вместо нового объекта я получал в ИЕ всегда false =/
Пришлось переделывать на дивы.
Да, дивы — это первое о чём я подумал. Но намучавшись с созданием таблицы на дивах, плюнул и вернулся к таблицам.
Интересует реализация на чистом javascript, т.к. нет желания изучать jquery
//http://msdn.microsoft.com/ru-ru/library/ms533897%28en-us,VS.85%29.aspx
var ro_tags = {COL:1, COLGROUP:1, FRAMESET:1, HEAD:1, HTML:1, STYLE:1, TABLE:1, TBODY:1, TFOOT:1, THEAD:1, TITLE:1, TR:1};
element.appendChild(document.createTextNode(new Date().getTime().toString()));
var old_html = element.innerHTML;
while(element.tagName in ro_tags) element = element.parentNode;
element.innerHTML = element.innerHTML.replace(old_html, arrhtml[id]);

* This source code was highlighted with Source Code Highlighter.
Какой-то очень странный подход. Для того чтобы навесить событие зачем-то используется innerHTML, которое по-хорошему вообще не очень то здорово использовать, а потом поверх этого ставится заплатка на 1К кода.
UFO just landed and posted this here
интересно, если покопаться ( то есть открыть исходник и сделать поиск ) то видно что
функция html(code) эквивалентна empty().append(code);

Но там же нашлась функция replaceWith(code) которая собственно по DOMу сама шариться и вставляет. По счастливому стечению обостоятельств именной ей я и вставляю готовые куски в таблицу.
В jquery не копался, но мне кажется, что html(code) отличается от empty().append(code) также как innerHTML отличается от appendChild. Это хорошо видно в моей реализации на чистом Javascript-е.
UFO just landed and posted this here
Sign up to leave a comment.

Articles