Зацените
Интерактивная Таблица Менделеева
Буду рад критике, комментариям, предложениям |
Бухалыч, на вид - очень здорово, красиво и информативно. По поводу кода - часто встречаются конструкции, которые на сегодняшний день лучше не использовать (например, часто видно - document.write(...), обращение к формам по именам (document.myf.blabla) вместо id'шников и через объект forms (document.forms['myf'].elements['blabla']) и т.д.)
|
Дмитрий, спасибо за развернутый ответ!
|
div id="grshb2" class="groupsh10" style="width: 50px; height: 20px; z-index: 2; font-size: 10pt; font-weight: bold; color: rgb(102, 102, 102);">
</div> Если есть класс, зачем писать инлайн-стиль??? <center>V</center> Куча лишних тегов!!! Диву (в классе) ставишь text-align:center; и всё. var lp = j*50-(-30); var lpb = j*50-(-22); что за извращения? + писать уже не модно? Повторяющиеся массивы значений можно вынести в глобальный контекст и обращаться к ним когда надо... |
Dmitry A. Soshnikov, я понимаю, чем вам не угодили document.name.foo, с натяжкой могу понять, чем не угодила коллекция document.forms, но document.write вам что сделал?
|
Бухалыч,
Выглядит отлично. Конечно есть замечания к коду, на в данном конкретном случае их можно опустить. Если вы хотели бы и дальше заниматься JavaScript, то я бы посоветовал вам начать с изучения DOM, потому что, действительно, document.write() - устаревший подход. |
Андрей Параничев, что вы понимаете под словом "устаревший"? Вот я понимаю document.all устаревший, т.к. ие его до сих пор поддерживает только из-за обратной совместимости (а Опера - потому что своего мнения не имеет, и за всеми все повторяет). А document.write почему устаревший? Ответьте мне уже наконец кто-нибудь.
|
document.write используется в момент загрузки документа. Если документ загружен и закрыт на запись, то document.write откроет его, ОЧИСТИВ всё содержимое (фактически затерев).
Посредством document.write можно вписать что угодно, но он медленно работает (желательно предварительно всё сохранить в строку и потом использовать document.write один раз с этой строкой). Таким методом нельзя получить сыылку на DOM элемент, добавляемый в документ. Если вы используете document.write во фрейм созданный из скрипта, то не факт, что он будет писать инфу туда, куда вы думаете: document.write('<scr'+'ipt src="111.js"></scr'+'ipt>') запишет его в хэд фрейма, не создавая боди. Если этот скрипт (111.js) содержит document.write, то запись продолжится в head, что окажется неверным... |
Kolyaj,
Многие используют document.write не в том контексте, для которого он сделан, а именно, используют вызовы document.write уже после события load документа, хотя метод document.write был сделан для вывода строк во время рендеринга документа. Для унификации подходов по добавлению и изменению элементов страницы лучше повсеместно использовать DOM, а не связку document.write() + DOM. Тем более, что использование только DOM в некоторых случаях ускорит выполнение скрипта на странице. Кроме всего прочего, document.write несовместим с XML, поэтому он не работает в документах, сверстанных по спецификации XHTML. Тем не менее, вопреки тому что я думал, document.write не является не рекомендованным W3C методом. Так что "устаревший" на счет него, наверно, неправильно говорить. |
Цитата:
Цитата:
http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite http://www.w3.org/TR/WCAG20-TECHS/SCR21.html (description) http://www.w3.org/TR/REC-html40/inte....html#h-18.2.3 (последний note) ну и это - http://www.w3.org/WAI/GL/WCAG20/WD-W...008/#doc-write Я его не отрицаю, просто не использую. А теперь вы скажите, чем вам он угодил и что там за "натяжки"? Цитата:
|
По поводу глобальных/локальных переменных:
Разве функция работает не быстрей, если обращается к локальным переменным? |
Dmitry A. Soshnikov, innerHTML тоже не используете?
Цитата:
|
Kolyaj, я что-то не пойму вашу позицию =)
Цитата:
Цитата:
|
Цитата:
В данном же случае приходится в функции каждый раз создавать огромный массив. Соответсвенно создать используемые данные всегда лучше 1 раз... Не стоит также забывать, что джаваскрипт - интерпретируемый язык... Так что чем больше строк - тем медленнее работает... |
ZoNT,
Цитата:
P.S.: а вот к вопросу о памяти (если функция выступает в качестве конструктора) - лучше, ествественно, хранить однотипные сущности в одном месте (как правило - в прототипе конструктора). |
Цитата:
Или ты хочешь, чтобы я тебе пример привёл с цифрами, а потом отнекиваться будешь??? |
Цитата:
Цитата:
|
<html> <body> <script type="text/javascript"> // local var function F1(){ var a = []; for (var i=0;i<1000;i++) a.push(i); var str = []; for (var i=0;i<1000;i+=10) str.push(a[i]); } var start = new Date(); for (var i=0;i<1000;i++) F1(); var res1 = (new Date())-start; //********************************** // Global var var arr = []; for (var i=0;i<1000;i++) arr.push(i); function F2(){ var str = []; for (var i=0;i<1000;i+=10) str.push(arr[i]); } start = new Date(); for (var i=0;i<1000;i++) F2(); var res2 = (new Date())-start; //********************************** alert([res1,res2]); </script> </body> </html> |
ZoNT, ты утверждаешь яро что-то, пытаясь аргументировать практически, - это смело, я ценю, но, дружище, давай так - если приводишь практические примеры, то, пожалуйста, без мухлежа =) Твой опыт (если все по-честному относительно локальных/глобальных переменных) должен быть таким:
<html> <body> <script type="text/javascript"> // local var function F1(){ var a = []; for (var i=0;i<1000;i++) a.push(i); var str = []; for (var i=0;i<1000;i+=10) str.push(a[i]); } var start = new Date(); for (var i=0;i<1000;i++) F1(); var res1 = (new Date())-start; //********************************** // Global var var arr = []; var str = []; function F2(){ for (var i=0;i<1000;i++) arr.push(i); for (var i=0;i<1000;i+=10) str.push(arr[i]); } var start = new Date(); for (var i=0;i<1000;i++) F2(); var res2 = (new Date())-start; //********************************** alert([res1,res2]); </script> </body> </html> И тогда результаты соответсвуют теории. А вообще, повторю снова, сначала теория - 10.1.4 Scope Chain and Identifier Resolution |
Цитата:
Цитата:
Цитата:
Самый яркий пример использования document.write -- вывод текста на страницу только при условии включенного JS. Цитата:
|
Цитата:
Читай выше - я отвечал на конкретный код - это раз. Твоё утверждение "Во всех случаях", как видишь, неверно - это два. Ну и три - я не уважаю людей, которые не могут признать что они ошиблись... |
Цитата:
|
Kolyaj,
Цитата:
Цитата:
Цитата:
P.S.: я надеюсь, хотя бы, основная позиция у вас верная - найти истину, а не пытататься отстоять то, что может не так и важно =) |
ZoNT,
Цитата:
Цитата:
Цитата:
Цитата:
Давай так: - что не понятно в 10.1.4? Я расскажу, если надо (на этом сайте в статье про замыкания тоже говорилось про scope chain - можно сначала ее прочесть). - что не понятно в твоем подкорректированом примере? У тебя какие-то странные результаты? Может, второе число меньше первого? =) |
Ну вот, отмаза одна за другой... Ну как так можно... Знал я одного такого на другом форуме, так его ник стал именем нарицательным...
|
ZoNT, говори по существу, хватит демагогировать Ты ж толком не можешь привести подтверждение своих слов и уж тем более не можешь опровергнуть мои; как следствие - переход на личности, явный признак, что человек не разбирается в том, о чем ведет беседу. А переход на личности - это уже нарушение правил (не нужно =).
|
ZoNT,
Вы в свою пользу никаких аргументов не привели, кроме одного, очевидно неверного в контексте задачи примера. |
Ну уж если ты считаешь, что случай с инициализацией переменной (массива) в глобальном контексте - это уже не случай, то млжешь считать что ВСЕГДА быстрее.
К сожалению, я программист, поэтому не могу отрицать очевидного... |
Цитата:
Цитата:
Цитата:
Цитата:
|
"неправильный пример" - я долго смеялся...
|
Kolyaj, товарисч Dmitry A. Soshnikov сегодня что-то не то съел наверное...
Не спорь с ним! Он ВСЕГДА прав... |
Цитата:
Парни, давайте так - либо по существу, либо - прикрываем тему, без толку болтать смысла нет (особенно, если кто-то и не хочет учиться и разбираться, как работает JavaScript). ZoNT, если захочешь разобраться в сути (больше, чем на дилетантском уровне) - больше читай спецификацию. Разговор окончен. |
Вау, меня списали в дилетанты :)
Ну ничего, придётся искать, чего бы ещё почитать про жс, чтобы не быть дилетантом и узнать что-нибудь новое... |
Цитата:
|
Kolyaj,
Цитата:
Цитата:
|
Слив защитан.
|
ZoNT,
Цитата:
Kolyaj, Вы не правы, и document.write() и innerHTML не рекомендованы W3C, о чем и было написано в начале темы. Вы можете использовать их, если хотите. А не наоборот, можете не использовать их, если хотите. |
Цитата:
|
Цитата:
1) первый тест: локальная переменная a (инициализируется локально, на то она и локальная). 2) второй тест: глабальная переменная arr (инициализируется глобально - для чего я и предложил топикстартеру перенести массивы из функций в глобальный контекст - см. пост №4). Утреждение товарисча Dmitry A. Soshnikov`а: "Во всех случаях." Как видите - не во всех... |
ZoNT,
Я и спрашиваю, где во втором тесте глобальная переменная? Точнее действия над глобальной переменной. // Свойство window arr: var arr = []; // Действия над __локальной__ (в данном scope) переменной arr for (var i=0;i<1000;i++) arr.push(i); function F2(){ // Локальная переменная str: var str = []; // Действия с локальной переменной, где // вставляется элемент глобальной (в данном scope) // переменной arr. Кончено, доступ к arr[] - быстрый. for (var i=0;i<1000;i+=10) str.push(arr[i]); } |
Часовой пояс GMT +3, время: 06:05. |