аналог innerHTML
Как известно, W3C рекомендует не использовать innerHTML, а вместо него DOM-методы.
Хорошо, теги с текстом генерить мы можем, а вот как в тег вставить, например, HTML-код символа? createTextNode() вставляет их "как есть", data/setData - то же самое... :-? |
String.fromCharCode(code); А вообще, они там (W3C) теоретики все. Практика показывает, что без innerHTML нельзя. |
За код спасибо. Почему-то не попадался такой...
Цитата:
|
Возникает закономерный вопрос -- "А зачем?" всех символов есть Юникод-представление, милости просим. А HTML-код, как видно из названия, нужен для HTML
|
Цитата:
|
чем не угодил createTextNode('\'') ?
|
Цитата:
|
хоть innerHTML и не входит в спецификации W3C его поддерживают все современные браузеры. Уверен будут поддерживать и дальше. Вообще не вижу причин заморачиваться.
|
Цитата:
Цитата:
Цитата:
Нет, я вкурсе, что & - это амперсанд, но откуда такая запись взялась? |
Цитата:
n - восьмеричное число, не большее 377. Соответствует символу с восьмеричным кодом n. \xn n - шестнадцатеричное число, состоящее из двух цифр. Соответствует символу с шестнадцатеричным кодом n. \un n - шестнадцатеричное число, состоящее из четырех цифр. Соответствует символу Unicode с шестнадцатеричным кодом n. |
Riim, спасибо, впринципе всё понятно:)
|
Цитата:
|
Increazon,
радиус кривизны слишком мал |
Спасибо. Сделал. Вот код:
var ar2 = JSON.parse(editStr, function (k,v) { return v; }); // now init the innerHtml numbers of door updadeCellsDoorNumber(); function updadeCellsDoorNumber() { var temputnd; var cuttd; for (var i=1; i<=ar2_ln; i++) { temputnd = document.createTextNode(guv(i,'door')); cuttd = $('td'+i); cuttd.replaceChild(temputnd,cuttd.firstChild); if ((guv(i,'status')=='reserved') || (guv(i,'status')=='sold')) { $('td'+i).style.backgroundColor = '#990000'; $('td'+i).style.color = '#f4f4f4'; } else $('td'+i).style.color = '#242021'; } } Дак если радиус кривизны мал, давайте все гавно делать, что в фаерфокс хорошо, то в ИЕ полная хуйня. ? |
<html> <body> <table> <tr> <td id="td"></td> </tr> </table> <script type="text/javascript"> document.getElementById('td').innerHTML='sdsad'; </script> </body> </html> ну и где что не работает в IE? |
У него, наверно, что-то вроде
<html> <body> <table> <tr> <td id="td"><div><script type="text/javascript"> document.getElementById('td').innerHTML='sdsad'; </script></div></td> </tr> </table> </body> </html> |
Проверил. Работает. Но если ты слышал о проблеме ИЕ7, он может через раз то выдавать ошибку, то показывать страницу. Лично я уже 2 раза столкнулся с таким приколом. А новое решение - универсально, и придерживается W3C. Я больше никогда не буду использовать
|
На зеркало неча пенять, коли рожа крива.©
|
Цитата:
|
Хотел спросить, а как генерируются диалоги и другие виджеты в JQuery?
Через innerHTML или через createElements ? Прочитал вот эту статью http://javascript.ru/optimize/javascript-performance Т.е. обращение через createElements очень медленное будет по сравнению с innerHTML. Например попробуем сделать диалоговое окно. Там надо как минимум раз 5 сделать элемент через createElements. А в innerHTML всего один раз обратится к DOM и всё. Ведь обращение к DOM очень медленное. Подскажите, пожалуйста как лучше генерировать диалоговые окна, через какой метод и как это сделано в framework-ах? |
Цитата:
|
Есть другой вариант. В памяти лежит шаблон HTML - кода. Так же есть ссылки на необходимые элементы, которые нужно "подправить" при создании нового экземпляра шаблона. Таким образом, при создании экземпляра, клонируем нужный шаблон, правим (если надо) и добавляем в DOM одним разом - с помощью documentFragment, если добавляется всё в 1 место. Не уверен, что будет быстрее innerHTML, но удобнее - это факт. Так же не придётся создавать каждый элемент шаблона через createElement.
|
Цитата:
try { for ( var i = 0, l = this.length; i < l; i++ ) { // Remove element nodes and prevent memory leaks if ( this[i].nodeType === 1 ) { jQuery.cleanData( this[i].getElementsByTagName("*") ); this[i].innerHTML = value; } } // If using innerHTML throws an exception, use the fallback method } catch(e) { this.empty().append( value ); } UPD Kolyaj, innerHTML может иногда подвести в ИЕ, при невалидном html. |
Цитата:
|
Kolyaj, хм, а тема-то старовата, я и не заметил :)
Пример тот, что у ТС'а :) |
Цитата:
|
У ТС'а была проблема, которая и является примером "подвести в ИЕ" :)
UPD Тю, с чего это я решил, что Increazon -- ТС. Туплю, видимо :) |
Цитата:
|
ТС, B~Vladi то бишь, про IE вообще не упоминает. Может ты имеешь в виду
Цитата:
|
Kolyaj, да, я это и имел в виду :) И Вы правы -- тут innerHTML вроде не виноват -- скорее всего это вставка элементов JS-ом до load страницы.
|
А кто такой ТС? впервые слышу. Признаюсь что в том сайте который я сделал - используется и innerHTML (лень менять, ведь работает), и AppendChild. Но InnerHTML всетаки не предусмотрен стандартами W3C, бейте его!
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 07:44. |