аналог 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, время: 18:20. |