Jump to content
  • 0

Вариант навигации.


Dimitry Wolotko
 Share

Question

Сейчас сижу с больной головой (болею), думаю над навигацией в админке тех сайтов, что я сейчас делаю (несколько сайтов, админка одна).

Поделился со знакомцем мыслями - он мне сразу кинул (http://www.artlebedev.ru/tools/technogrette/js/tabsheets/) - идея пришлась по вкусу, но код JS раздут - ужас просто, написал свой, посмотрите, мб я что - то из функционала пропустил?

PS - мо? чудо с помощью php вполне можно и динамическим сделать.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
<style>
.mon2 {color:black;}
.mon2 {color:red;}
</style>
</head>

<body>


<script type="text/javascript" language="JavaScript">
function so2( objName1, objName2, objName3 )
{
oObj1 = document.getElementById( objName1 );
oObj2 = document.getElementById( objName2 );
oObj3 = document.getElementById( objName3 );
oObj1c = document.getElementById( objName1 + "c" );
oObj2c = document.getElementById( objName2 + "c" );
oObj3c = document.getElementById( objName3 + "c" );
oObj1.style.display = "block";
oObj1c.className = "mon3";
oObj2.style.display = "none";
oObj2c.className = "mon2";
oObj3.style.display = "none";
oObj3c.className = "mon2";
}
</script>

<div>
<span class="mon3" id="date2c" onclick='so2( "date2", "date3", "date4" );'>Вкладка 1 |</span>
<span class="mon2" id="date3c" onclick='so2( "date3", "date4", "date2" );'>Вкладка 2 |</span>
<span class="mon2" id="date4c" onclick='so2( "date4", "date2", "date3" );'>Вкладка 3 |</span>
</div>
<div style="display: block;" id="date2">
Содержимое вкладки номер один:

<table border="1">
<tr>
<td>table data</td>
<td>table data</td>

<td>table data</td>
</tr>
<tr>
<td>table data</td>
<td>table data</td>
<td>table data</td>
</tr>
</table>
</div>
<div style="display: none;" id="date3">
Содержимое вкладки номер два:

Аниме убивает ваш мозг!

</div>
<div style="display: none;" id="date4">
Содержимое вкладки номер три:

<h1>труляля</h1>
<h2>труляля</h2>
<h3>труляля</h3>
<h4>труляля</h4>
<h5>труляля</h5>
<h6>труляля</h6>
</div>

</body>
</html>

Link to comment
Share on other sites

  • Answers 154
  • Created
  • Last Reply

Top Posters For This Question

Recommended Posts

  • 0
Вы представляете себе, что существуют проекты, которые в неизменном виде живут годами?

Представляю. Я не представляю другого - что там такого должно происходить с табами, что для "общения" с ними нужен опыт, которого не всем хватает.

Ни в коем разе, это к вопросу что человек сам себе выбирает окружение. Мне, например, нравится жить совсем в другом мире, без помоек =)

Незнаю, причем тут это, но я писал совсем о другом. Позвольте, напомню.

Когда я завел речь о well-formed структуре документа, меня попытались убедить в том, что это все "воздушные замки". И что со временем, когда придет опыт, я пойму, что (цитирую):

1. многообразие тегов практически невостребовано в интерфейсах.

2. важность логического оформления кода нивелируется.

3. для интерфейсов важно не well-formated, а дешевизна в разработке.

4. приходится использовать свои атрибуты, которые не проходят валидацию, но с ними проще работать.

Вот на это я и ответил соответствующе.

C самого начала я с ним согласен, что нет никакой разницы, какие теги использовать. За исключением тех, внешний вид которых не может контролироваться.

Если нет разницы, зачем "трубить", что я предложил "студенческий" вариант, и на самом деле все нужно сделать так, как уже сделано у кого-то в админке?

Другое дело, что я предпочитаю логически верную разметку.

Вот здесь как-раз все и сводится к чьим-либо предпочтениям, так ведь?

Но в любом случае, для меня куда более ценным является мнение человека, имеющего практический опыт.

Все верно - для меня тоже важно мнение людей, чей практический опыт и компетентность не вызывает сомнений.

Link to comment
Share on other sites

  • 0

Вспомнил тут, в каком я был шоке, когда посмотрел на код интерфейсов, генерируемый Bindows, Zimbra, Tibco и прочими крупными движками для RIA (rich internet application).

Сейчас я точно могу сказать, что для RIA, к которым, несомненно, относится интерфейс управляемый табами, семантически корректная разметка совершенно не важна.

Когда я завел речь о well-formed структуре документа, меня попытались убедить в том, что это все "воздушные замки". И что со временем, когда придет опыт, я пойму, что (цитирую):

1. многообразие тегов практически невостребовано в интерфейсах.

2. важность логического оформления кода нивелируется.

3. для интерфейсов важно не well-formated, а дешевизна в разработке.

4. приходится использовать свои атрибуты, которые не проходят валидацию, но с ними проще работать.

Вот на это я и ответил соответствующе.

Все 4 пункта полностью корректны.

Link to comment
Share on other sites

  • 0
Вспомнил тут, в каком я был шоке, когда посмотрел на код интерфейсов, генерируемый Bindows, Zimbra, Tibco и прочими крупными движками для RIA (rich internet application).

...

Все 4 пункта полностью корректны.

Что ж, значит форумы пустовать не будут. На них так и будут искать ответы, вроде: "А почему у меня вот здесь вылезло что-то не то?", или "Не могу понять, куда вставить это, чтобы появилось вон то?". Причем, когда я заглядываю в портфолио вопрошающих, я вижу, что люди имеют многолетний опыт. Выходит, что многие годы так и уходят на борьбу с багами. А откуда берутся эти баги - это я узнал из этой темы.

Link to comment
Share on other sites

  • 0

s0rr0w,

Вы код вообще изучали?
Вы код смотрели?
Внимательно изучите код.

дружище, я участвую в дискуссиях именно так, как мне возжелается, с кодом или без, с примером или без, и я вс?-таки сильно надеюсь, что вы обратили внимание на мои комментарии/замечания, чтобы лишний раз не подозревать меня в том, что код ваш я не посмотрел. Посмотрел. Не сотрясайте воздух, отсылая меня на перечитку плиз. :(

Про то, как отграничивать класс от класса (как и вообще слова) с помошью регулярных выражений вам нужно просто банально знать, обратитесь за примером к ближайшим к вам большим фреймворкам, если лень или недосуг изучать доки.

Правильный пример определения IE вам не нужен, опирайтесь на соответсвующие проверки нужного по месту свойства. Как минимум.

Скорость do-while разнится у браузеров, говорю ещ? раз, стараясь побороть ваше обобщение. Суть же дела не в скорости, а в бездумном использовании конструкции не к месту, как же вы упрямо не понимаете этого.

Чтобы одновременно рассеять ваши заблуждения по поводу inline-обработчиков и т.н. интерфейса документа тупо приведу пример:

<html>
<body>
<script type="text/javascript">
// определим свою функцию и потом посмотрим на не? в inline-обработчике, кликнув по спану
var getElementsByClassName = function () {
alert('preved medved!');
};
</script>
<span onclick="alert(getElementsByClassName);">test</span>
</body>
</html>

Скачайте, к примеру оперную альфу - http://my.opera.com/desktopteam/blog/ - и понаблюдайте. Если лень скачивать, то замените метод на любой другой, ныне существующий, чтобы осознать потенциальные грабли.

WingedFox, между нами девочками, ведь этот скрипт, который "наиболее практичное решение, идущее из опыта" - это же почти что трэш из девяностых, некачественный со всех сторон, безыдейный, с конкретными ошибками, неорганизованный, просто откровенно слабый по форме и содержанию... почему вы его защищаете для меня осталось загадкой. Я ещ? понял бы про защиту позиции. Но скрипт-то ведь вообще никакой. Абстрагируйтесь от AKSa и от своей нелюбви к теории. По чесноку? :)

Link to comment
Share on other sites

  • 0

AKS

Могу Вас уверить, что следование стандартам ничуть не улучшает ситуацию. Просто обмен опытом заменяется на цитаты... и виртуальные умозаключения.

Веб слишком молод и слишком бурно развивается, чтобы было на что опираться.

Link to comment
Share on other sites

  • 0
Могу Вас уверить, что следование стандартам ничуть не улучшает ситуацию.

А как ситуация может улучшится, если никто не желает следовать стандартам, еще при этом учат других: "делай, как я"?

Просто обмен опытом заменяется на цитаты... и виртуальные умозаключения.

Это бывает ничуть не хуже - смотря от кого исходит информация, и чьи это умозаключения.

Веб слишком молод...

Он старше некоторых. :)

Link to comment
Share on other sites

  • 0
почему вы его защищаете для меня осталось загадкой.

Людей, набивших шишки на подобных вещах куда проще научить хорошему, нежели студентов, вооруж?нных сверкающей брон?й "идеального знания". Просто из опыта.

Я ещ? понял бы про защиту позиции. Но скрипт-то ведь вообще никакой.

Ну, защищал-то я именно позицию. Не далее, как в 14:30:01

Что мне не сильно нравится в коде -- отсутствие идеологии, я предпочитаю красивые решения.
Абстрагируйтесь от AKSa и от своей нелюбви к теории. По чесноку? roll

Иногда кровь вскипает и хочется ввязаться в новый крестовый поход. =)

В общем, по чесноку.

Link to comment
Share on other sites

  • 0
Могу Вас уверить, что следование стандартам ничуть не улучшает ситуацию.

А как ситуация может улучшится, если никто не желает следовать стандартам, еще при этом учат других: "делай, как я"?

Естественным отбором улучшится, через пару тысяч лет. Когда-то и религия была юна. И духовные практики.

Да и холодильники сначала делали кто во что горазд. Индустрия должна повзрослеть.

Просто обмен опытом заменяется на цитаты... и виртуальные умозаключения.

Это бывает ничуть не хуже - смотря от кого исходит информация, и чьи это умозаключения.

Так стандарты -- это уже и есть умозаключения, продвигаемые некими профессионалами, в качестве пропаганды своего вИдения мира. И не более того.

Как пример в разнице опоры на опыт и умозаключения -- сравните event.button в реализации MS и "стандартном".

Link to comment
Share on other sites

  • 0
Людей, набивших шишки на подобных вещах куда проще научить хорошему, нежели студентов, вооруж?нных сверкающей брон?й "идеального знания". Просто из опыта.

Вы так пишите, как-будто студенты, вооруженные броней, в ней родились. И Вы, к тому же, не можете сквозь нее пробиться.

Наверно были потрачены какие-то усилия для того, чтобы приобрести знания? А если знания идеальны, то было потрачено еще больше усилий, так ведь? Или Вы считаете, что усилия были потрачены на то, чтобы потом использовать знания в борьбе с учителями?

Может быть ваш опыт говорит именно о таких случаях. Однако опыт, даже суммарный от всех участников форума - это настолько малая величина, что утверждать что-либо было бы слишком самонадеянным действом.

Как пример в разнице опоры на опыт и умозаключения -- сравните event.button в реализации MS и "стандартном".

А я, между прочим, вижу это иначе, чем MS vs стандарты. Для меня есть стандарт MS, есть и другие (не буду перечислять).

Link to comment
Share on other sites

  • 0
Посмотрел. Не сотрясайте воздух, отсылая меня на перечитку плиз. :)

Тогда мне непонятно, почему вам непонятно. Вот я и сомневался, что вы достаточно хорошо изучили принципы работы моего кода.

Про то, как отграничивать класс от класса (как и вообще слова) с помошью регулярных выражений вам нужно просто банально знать, обратитесь за примером к ближайшим к вам большим фреймворкам, если лень или недосуг изучать доки.

Не надо меня отсылать куда-то там. Приведите код. Это добавит вам уважение как к человеку, который умеет доказать свои слова делом.

Правильный пример определения IE вам не нужен, опирайтесь на соответсвующие проверки нужного по месту свойства. Как минимум.

Смысла в этом не вижу. Есть IE, который для меня существует всего в 2-х версиях, есть DOM-ориентированные браузеры. Зачем что-то придумывать, если можно спокойно ограничиться такой проверкой? Люди, которые сознательно идут на подмену юзерагента пусть также сознательно и сталкиваются со всеми вытекающими последствиями. Мало того, это редко распространенная практика в корпоративном секторе.

Скорость do-while разнится у браузеров, говорю ещ? раз, стараясь побороть ваше обобщение. Суть же дела не в скорости, а в бездумном использовании конструкции не к месту, как же вы упрямо не понимаете этого.

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

Чтобы одновременно рассеять ваши заблуждения по поводу inline-обработчиков и т.н. интерфейса документа тупо приведу пример:

И какие же заблуждения мои должны были рассеяться? Я скачаль альфу оперы, запустил код. Граблей не нашел вообще. Они находятся сугубо в вашем воображении. Моя функция является методом объекта window, встроенная - document'a. Где грабли? В том, что две фунции имеют одинаковое название? Это смешно. И в чем проблемы с inline-обработчиками, поясните мне темному, может я чего пропустил.

WingedFox, между нами девочками, ведь этот скрипт, который "наиболее практичное решение, идущее из опыта" - это же почти что трэш из девяностых, некачественный со всех сторон, безыдейный, с конкретными ошибками, неорганизованный, просто откровенно слабый по форме и содержанию... почему вы его защищаете для меня осталось загадкой.

Ах, какие высокопарные слова. Если вы делаете по другому, то это не значит, что мой код не содержит идей.

Например, я использую обращение к элементам по имени классов. Это куда лучше обращения по ID. Я использую HTML темплейтирование, вместо создания нод при помощи createElement, и не видеть выгоду от этого считаю узостью мышления. Активация по эмуляции клика - тоже не считаю архаикой, а как раз наоборот. Да, я согласен, что на первый взгляд код кажется именно таковым, каким вы описали. Но не видел вашего супер-кода, а поэтому вообще сомневаюсь в ваших способностях. Говорить красивые слова каждый умеет :(

Link to comment
Share on other sites

  • 0

AKS, прокомментируйте следующее, пожалуйста.

1. DT, DD нельзя использовать без DL. Последствия переноса части кода в другую ветку дерева может привести к потенциальному багу с отображением.

2. В вашем JS коде жестко закреплена структура. Что будет, если после H будет стоять что-то другое? Например еще один H. Вполне реальная ситуация.

3. Ссылки создаются скриптом. Что делать, если понадобится уникальные коды для каждой закладки, где не только CSS будет изменен, но и отличаться HTML?

4. Таблицу нельзя использовать после H, так как присваивается display: block.

5. Что делать, если надо будет между контентом табов и самим переключателем вставить еще какие-то теги?

6. Что будет, если контент таба будет удален или перемещен?

Ответьте на эти вопросы, только спокойно, рассудительно, без эмоций.

Link to comment
Share on other sites

  • 0
Наверно были потрачены какие-то усилия для того, чтобы приобрести знания? А если знания идеальны, то было потрачено еще больше усилий, так ведь? Или Вы считаете, что усилия были потрачены на то, чтобы потом использовать знания в борьбе с учителями?

Мне вс? равно, сколько человек потратил сил и времени на то, чтобы начистить свой значок "знатока стандарта Х". Если эти знания не подтверждаются практическим опытом -- они бесполезны. Вот и вс?.

Специалисты с шишками куда как ценнее -- они понимают, что вс? в мире относительно. Это да?т им значительно бОльшую гибкость и умение подстроиться под любые задачи/ограничения, в отличие от деревянных стандартоносцев...

Как пример в разнице опоры на опыт и умозаключения -- сравните event.button в реализации MS и "стандартном".

А я, между прочим, вижу это иначе, чем MS vs стандарты. Для меня есть стандарт MS, есть и другие (не буду перечислять).

А предложение было совсем не в том, чтобы с умным видом сказать про "стандарт MS и другие". Я предлагал сравнить подходы в разработке определ?нных механизмов, на примере вполне конкретной реализации вполне конкретного свойства.

Link to comment
Share on other sites

  • 0
...только спокойно, рассудительно, без эмоций.

Не могу обещать рассудительности, но вот спокойно - это пожалуйста. Негативные эмоции возникают, когда меня пытаются загнать в угол постоянными напоминаниями о различии в "ранге".

...прокомментируйте следующее, пожалуйста.

Через все вопросы красной нитью проходит примерно такая мысль: "А что будет, если вдруг что-то случится?".

Как-раз вчера читал R. Cornford'а, поэтому его и цитирую. Фраза очень кстати:

You are the one doing the programming so program the system to be what you want it to be.

Поясню. У Вас есть данные, и они не упали на Вас с неба, так ведь? Это данные определенного типа, и у Вас в базе они появились не случайно - они предназначены для какой-то конкретной цели. Затем Вы их сами своими руками структурируете определенным образом. Сделать это, конечно же, нужно так, чтобы потом не пришлось жаловаться AKS'у: "Ну вот, что делать - здесь откуда-то взялся еще один заголовок?". Затем нужно будет сесть и написать, опять же, своими руками какие-то шаблоны преобразований. И опять это нужно сделать так, чтобы потом не получить какой-то сюрприз.

Надеюсь, понятна моя точка зрения? Т.е. все ваши беды - это дело рук ваших. Не пеняйте на AKS'а, что сценарий "спотыкается" о внезапно появившиеся теги:

Уже сколько раз обсуждалось - реализация и подход к решению зависит от поставленной задачи и е? требований.

Так вот я выполнял свою задачу - обработал предложенную мной структуру.

А Вы что хотите? Чтобы я пытался написать сценарий на "все времена"? Но тогда мне потребуется времени больше, чем два часа. И это уже будет не форумное соревнование, так ведь?

Да, и еще - а Вы всерьез думаете, что ваш сценарий работает, как часы? Если думаете именно так, то это глубочайшее заблуждение.

А вот ответы на ваши вопросы:

Q: DT, DD нельзя использовать без DL. Последствия переноса части кода в другую ветку дерева может привести к потенциальному багу с отображением.

A: Используйте методы DOM для создания, клонирования, вставки необходимых элементов.

Q: В вашем JS коде жестко закреплена структура. Что будет, если после H будет стоять что-то другое? Например еще один H. Вполне реальная ситуация.

A: Этой "проблеме" посвящена первая часть этого сообщения.

Q: Ссылки создаются скриптом. Что делать, если понадобится уникальные коды для каждой закладки, где не только CSS будет изменен, но и отличаться HTML?

A: Перечень допустимых дочерних элементов для :

#PCDATA | TT | I | B | BIG | SMALL | EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE | ABBR | ACRONYM | A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO | INPUT | SELECT | TEXTAREA | LABEL | BUTTON )* -( A )

Q: Таблицу нельзя использовать после H, так как присваивается display: block.

A: ???.

Q: Что делать, если надо будет между контентом табов и самим переключателем вставить еще какие-то теги?

A: Если нужно вставить, надо взять и вставить.

Q: Что будет, если контент таба будет удален или перемещен?

A: Ничего не будет.

Link to comment
Share on other sites

  • 0
Это да?т им значительно бОльшую гибкость и умение подстроиться под любые задачи/ограничения, в отличие от деревянных стандартоносцев...

А знание, понимание сути происходящего не дает "гибкости". Ваше "умение подстроиться под любые задачи/ограничения" звучит, как "умение навтыкать костылей".

А предложение было совсем не в том, чтобы с умным видом сказать про "стандарт MS и другие". Я предлагал сравнить подходы в разработке определ?нных механизмов, на примере вполне конкретной реализации вполне конкретного свойства.

С "умным видом"??? Да уж.

Поскольку Вы честно признались в своем предвзятом отношении к некоторой категории лиц (оно, конечно, и так просматривалось из высказываний, вроде "деревянных стандартоносцев ... с умным видом" и т.д), что-либо обсуждать с Вами я пока не смогу. Нет смысла (it's just a one way conversation). Сначала надо найти общий язык.

Link to comment
Share on other sites

  • 0
Приведите код. Это добавит вам уважение как к человеку, который умеет доказать свои слова делом.

Обидно, что это не добавляет :) мне уважения, но, мама дорогая, s0rr0w, неужели без кода вам так сложно осо(при)знать проблему!? Через дефис в именах классов пишут на ура, это валидно, удобно (кому-то) и... просто существует в природе:

http://builder.com.com/5100-6371_14-5286783.html

http://www.stuffandnonsense.co.uk/archives...ions_table.html

Если в имени класса есть дефис (content-wrapper, content-left и т.п.), то в javascript регулярное выражение, составленное на основе метасимвола b, может "разорвать" такое имя со всеми вытекающим последствиями. Учитывая то, что вы упорно не хотите в этом разобраться сами приведу часть алгоритма (ECMAScript 15.10.2.6 Assertion), обратите внимание на "sixty-three characters":

The production Assertion :: b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the following:

1. Let e be x's endIndex.

2. Call IsWordChar(e-1) and let a be the boolean result.

3. Call IsWordChar(e) and let b be the boolean result.

4. If a is true and b is false, return true.

5. If a is false and b is true, return true.

6. Return false.

The production Assertion :: B evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the following:

1. Let e be x's endIndex.

2. Call IsWordChar(e- 1) and let a be the boolean result.

3. Call IsWordChar(e) and let b be the boolean result.

4. If a is true and b is false, return false.

5. If a is false and b is true, return false.

6. Return true.

The internal helper function IsWordChar takes an integer parameter e and performs the following:

1. If e == -1 or e == InputLength, return false.

2. Let c be the character Input[ e].

3. If c is one of the sixty-three characters in the table below, return true.

a b c d e f g h i j k l m n o p q r s t u v w x y z

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

0 1 2 3 4 5 6 7 8 9 _

Как видите, дефиса в этом перечне нет. Вот вам и пример (если теория не убеждает) того, как дефис не считается частью слова и, выбранный для решения задачи метасимвол, мешает выполнению этой самой примитивной задачи:

var s = 'preved text preved-preved text';
s = s.replace(/bprevedb/g, 'medved');
alert(s); //-> medved text medved-medved text

Теперь я думаю, вы сможете вс? это переварить, сделаете выводы и перестанете просить от меня решения, оно элементарное, ваша "библиотека" должна к нему прийти. Надеюсь, ответил, поехали дальше...

Я скачаль альфу оперы, запустил код. Граблей не нашел вообще. Они находятся сугубо в вашем воображении. Моя функция является методом объекта window, встроенная - document'a. Где грабли? В том, что две фунции имеют одинаковое название? Это смешно. И в чем проблемы с inline-обработчиками, поясните мне темному, может я чего пропустил.

Как маленького нужно за ручку что ли водить? С картинками? Запускаем скрипт в альфе оперы или в альфе фокса (Gran Paradiso), кликаем по спану и видим следующее (скрин моего воображения, не фотошоп, гы):

sorrow.gif

Это означает, что вместо своей собственной функции с именем getElementsByClassName вы видите на экране одноим?нную родную функцию. Почему? Ведь вы требуете в алерте свою функцию, а не метод document.getElementsByClassName? Ответа не дождусь - ...а вс? потому, что автор скрипта (я, допустим) не знает про то, что текст атрибута в инлайн-обработчиках вне стандартов преобразуется в функцию, эта функция вне стандартов имеет трудноуловимый scope chain, в этой scope chain вне стандартов может быть трудноуловимый(ые) объект(ы), например, сам объект, к которому привязан обработчик, или document и т.д. Отсюда автор скрипта (я, допустим), как любитель использовать инлайн-обработчики и любитель одновременно с этим использовать определ?нные идентификаторы в глобальном контексте (которые могут оказаться в scope chain инлайн-обработчика), должен это вс? как минимум знать. Обладая знаниями, он знает грабли и вообще их избегает или корректирует свою тактику. Если же он этого не знает, не видит, то ему бы постесняться. Надеюсь, ответил, поехали дальше...

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

Дважды ответил, что скорость циклов разнится от браузера к браузеру и что не в этом суть. Сейчас уже трижды. Используемая вами конструкция do-while отличается от прочих тем, что в соответствии с алгоритмом правая от do часть исполняется вне условий, при определ?нных обстоятельствах (замечу, не гипотетических, а реально часто встречающихся) loop может и не завершиться. Кроме того, реверсивный перебор потребовал от вас ручного уменьшения индекса на единицу - это лишний код, лишний контроль за сч?том, неудобно для работы "коллекциями", массивами и т.п. Вс? это вместе - причины такой малой распростран?нности do-while в качестве иструмента обычного перебора, если уж использовать, так только к месту, понимая алгоритм. Чего не наблюдаю. Что касается скорости, то вы ошибочно преувеличиваете роль самой конструкции, хотя вся соль в итерации снизу к нулю, вот я вам набросал код, чтобы было понятно, как одна и та же идея в общем-то одинаково работает в разных конструкциях:

<html>
<body>
<script type="text/javascript">
var i, t1, t2, t3 , t4;
t1 = new Date();
// 'do-while' loop
i = 1e6;
do {
i - 1;
} while (--i);
t2 = new Date();
// 'while' loop
i = 1e6;
while (i--) {
i;
}
t3 = new Date();
// 'for' loop
i = 1e6;
for (; i--; ) {
i;
}
t4 = new Date();
alert(['do-while->', (t2 - t1), 'while->', (t3 - t2), 'for->', (t4 - t3)].join(' '));
</script>
</body>
</html>

Результат говорит о том, что в среднем скорость равная, копеечную разницу во внимание не принимаю (хотя do-while местами даже проигрывает, гы), но, как говорилось выше, дело в другом:

loop_speed.gif

Надеюсь и тут я ответил вполне конкретно...

не видел вашего супер-кода, а поэтому вообще сомневаюсь в ваших способностях

Правильно сомневаетесь, способностей у меня может и мало, зато в этих тяж?лых жизненных обстоятельствах у меня ещ? хватает сил, чтобы :

a) не увеличивать своим кодом общий объ?м мирового javascript-трэша;

б) не считать себя командным результативным космокодером;

б) не лезть в спор без штанов.

:(:):(

Удачи.

Link to comment
Share on other sites

  • 0
Так вот я выполнял свою задачу - обработал предложенную мной структуру.

:cool:

Именно этого ответа я ждал. Итак, была предложена структура, структура обработана. Задача выполнена! А то, что это сферический конь в вакууме, никого не интересует.

Одно из самых простых требований к нормальному программисту - умение смотреть хотя бы на шаг вперед, а не механически выполнять задачу. Нет простых задач по определению. Вечно кроется какое-то западло в самом тривиальном месте. Именно поэтому для меня скрипт для табов куда сложнее задача, чем многим кажется.

Link to comment
Share on other sites

  • 0
...сферический конь в вакууме...

Называйте, как хотите. Я сам с недавних пор называю такую писанину j(ava)script from hell. Название происходит от одноименного портала JSFromHell.com (посмотрите на пример, и Вы поймете, что я имею ввиду). С некоторых пор пишу так умышленно для тех, кто хочет поспорить. Я ведь изначально не собирался преподносить Вам готового решения. Сам себя не буду цитировать во второй раз, лишь напомню, что я знал, что это все кончится ничем.

Вы вон даже простецкого "спасибо" Zeroglif'у не написали, а он ведь потратил кое-какое время на то, чтобы "привести Вас в чувство"...

Link to comment
Share on other sites

  • 0
неужели без кода вам так сложно осо(при)знать проблему!? Через дефис в именах классов пишут на ура, это валидно, удобно (кому-то) и... просто существует в природе:

Проблему? Да нет проблемы, проблема снова же сугубо в вашем воображении. Я уже написал, что достаточно кодеру дать пояснения по поводу именования классов и не заморачиваться.

Да, кстати, а где ваш "супер-беспроблемный" код? Не надо меня отсылать куда-то там... Код, Штирлиц, код!

Теперь я думаю, вы сможете вс? это переварить, сделаете выводы и перестанете просить от меня решения, оно элементарное, ваша "библиотека" должна к нему прийти. Надеюсь, ответил, поехали дальше...

Право же, не перестаете меня умилять.

Да, вызов getElementsByClassName непосредственно в inline-обработчике будет приводить к перекрытию вызова. Но никто не мешает написать window.getElementsByClassName. Да и покажите мне человека, который собирается писать javascript-опусы непосредственно в inline-обработчиках? Вызывая любую кастом-функцию внутри тела можно спокойно обращаться через getElementByClassName без указания window. Так я не понял, в чем проблема то? В перекрытии функций в очень специфических случаях? Так эта проблема есть всегда и с любым кодом.

Надеюсь и тут я ответил вполне конкретно...

Да вполне. Так, кажется я пользовался старыми данными по JS-интерпретатору. Цикл в современных браузерах уже работает на уровне do-while и while. Можно смело переписывать код.

a) не увеличивать своим кодом общий объ?м мирового javascript-трэша;

б) не считать себя командным результативным космокодером;

б) не лезть в спор без штанов.

а) зачем вам вообще познания в JS, если вы все равно пишете трэш-код?

б) после моего увольнения из одной команды разработчиков, на мое место до сих пор не могут найти человека. :) я не считаю себя космо-кодером, но количество багов в моих кодах до сих пор минимально. В отличие от моих сокоммандников.

в) это к вам относится в аналогичной мере.

Link to comment
Share on other sites

  • 0
Вы вон даже простецкого "спасибо" Zeroglif'у не написали, а он ведь потратил кое-какое время на то, чтобы "привести Вас в чувство"...

:)

В какое чувство? Человек указывает на какие-то проблемы, которые проблемами то не могут считаться. Это скорее особенности кода, чем баги.

Я не же указываю вам на то, что именование JS переменных должно происходить по правилам JS, а именно первая должна быть буква. Переменные типа "_" и "$" хоть и работают, но являются синтаксическими ошибками. Но я понимаю, что это особенности кода.

Я ведь изначально не собирался преподносить Вам готового решения.

На это я и указывал во многих своих постах. Что все привыкают делать сферических коней в вакууме. Решать задачу в лоб, не задумываясь про повторное использование кода, про масштабируемость систем, про организацию гибких структур.

Link to comment
Share on other sites

  • 0
Мне вс? равно, сколько человек потратил сил и времени на то, чтобы начистить свой значок "знатока стандарта Х". Если эти знания не подтверждаются практическим опытом -- они бесполезны. Вот и вс?.

Специалисты с шишками куда как ценнее -- они понимают, что вс? в мире относительно. Это да?т им значительно бОльшую гибкость и умение подстроиться под любые задачи/ограничения, в отличие от деревянных стандартоносцев...

Исходя из банальной психологии (думаю вы о ней слышали) научить (или скорее переучить) проще именно того у кого нет еще опыта и приобретенного багажа лагов, багов и фиксов. Если у человека в голове только теория, то там столько места, которое займет практика. А если у человека за плечами огромный багаж опыта и он уже привык пользоваться техникой выученной до автоматизма, но актуальность этой техники уже давно в прошлом, то извините но в 98% случаев он не сможет полностью перестроиться на новые рельсы. Т.к. обучаемость человека новому снижается с возрастом и количеством информации которое он уже усвоил.

Да и стандарты придумывали не на коленке попивая пивко у завалинки.

Да я согласен, что у молодых юношеский максимализм и им кажется что они боги в кодинге, но поверьте мне, они гораздо быстрее снимают лавровый венок и берут молоток для получения столь ценного для них опыта, чем люди с диким опытом или что еще хуже имеющие в прошлом признание и известность в своих кругах.

Так что тут скорее спор новой реформаторской школы и консервативно-практичного подхода. Оба хороши по своему и оба плохи по своему. А задача программиста найти ту самую золотую середину и решить для себя каким путем идти ему.

Link to comment
Share on other sites

  • 0
Так что тут скорее спор новой реформаторской школы и консервативно-практичного подхода. Оба хороши по своему и оба плохи по своему. А задача программиста найти ту самую золотую середину и решить для себя каким путем идти ему.

Исли рассматривать сложные интерфейсы, то я вам приведу ряд факторов, которые влияют на ваш код.

1. Любой код (HTML, JS, CSS) должен быть собран в едином логическом месте. Это значит, что для редактировании кода не потребуется править десятки файлов.

2. Код должен быть написан таким образом, что добавление или убирание кода или куска кода (больше касается HTML) не должно влиять на работоспособность всей системы.

3. Код должен быть как можно более простым, чтобы упростить понимание другими разработчиками принципов работы.

4. По умолчанию брать вариант, когда любой код не статичен, количество данных и их структура не константа, все может быть упрощено или усложнено, но это не должно влиять на работоспособность системы в целом.

5. С одним и тем же кодом может работать не один компонент.

6. Каждый компонент должен иметь API по взаимодействию с другими компонентами.

Вот и найдите для этого золотую середину. :)

Link to comment
Share on other sites

  • 0

http://prototypejs.org/

вот вам ответ

1. стандарт организации документов (стандарты)

2. вы про cms слышали в частности про (e107)? Там это реализовано вполне удобно и есть возможность изменения скриптов подключения скриптов, удаления скриптов, при этом система работает

3. тажа cms e107 там библиотека с функциями js очень понятна, но функциональна.

4. тоже самое что и выше

5. тоже самое

6. тоже самое

там как раз совмещение нового и архаического. Но она тоже не безгрешна.

Link to comment
Share on other sites

  • 0
http://prototypejs.org/

вот вам ответ

1. стандарт организации документов (стандарты)

2. вы про cms слышали в частности про (e107)? Там это реализовано вполне удобно и есть возможность изменения скриптов подключения скриптов, удаления скриптов, при этом система работает

3. тажа cms e107 там библиотека с функциями js очень понятна, но функциональна.

4. тоже самое что и выше

5. тоже самое

6. тоже самое

там как раз совмещение нового и архаического. Но она тоже не безгрешна.

1. Отчасти.

2. Не только слышал, но смотрел функциональность. Сейчас специально скачал исходники. Но я имел в виду не подключение php-скриптов, а куски HTML, JS, кода. Внутри e107 сплошная архаика и прибивание гвоздиками.

3. Понятна и функциональна сугубо в рамках e107.

4. Не нашел.

Дальше нет смысла смотреть и разбираться. e107 как раз пример того, как не надо делать. Да. есть правильные идеи, но не более того.

Link to comment
Share on other sites

  • 0
На это я и указывал во многих своих постах. Что все привыкают делать сферических коней в вакууме.

Вы, значит, указываете, да? А я Вам толкую о том, что прежде чем указывать, хорошенько подумайте - соответствуете ли Вы или ваш конечный результат работы этим требованиям.

Простой пример. Вам сказано, что ваша методика работы с именами стилевых классов ошибочна. Вы пишите, что это не проблема и решается на уровне документации. И после этого Вы еще называете себя "командным игроком"?

Получается так - мне, как кодеру из вашей команды, мало знать стандартные правила о допустимых символах в именах классов. Перед началом своей работы (для того, чтобы впоследствии ваш сценарий работал без ошибок) мне придется обратиться еще и к вашей "псевдо-документации" и поискать в ней ответ на вопрос: "А какие символы мне разрешает использовать s0rr0w?". При этом, найдя "запрещенные символы", я получу пояснения, что, видите ли, s0rr0w не пожелал особо вникнуть в этот вопрос, поэтому и появились эти ограничения.

Нормальная "командная работенка".

Решать задачу в лоб, не задумываясь про повторное использование кода, про масштабируемость систем, про организацию гибких структур.

...

Человек указывает на какие-то проблемы, которые проблемами то не могут считаться. Это скорее особенности кода, чем баги.

А Вы задумываетесь о повторном использовании кода и т.д.?

Не хотел я указывать на ошибки, но придется.

Один пример с уже знаменитой getElementsByClassName. Вы меня пытались упрекнуть в том, что в случае каких-либо изменений в структуре html мой код не будет работать. А теперь подумайте о том, что произойдет после изменений в вашем html-коде если в вашу getElementsByClassName вдруг (как Вы сами писали: "вдруг") будет передан элемент, у которого длина коллекции дочерних элементов будет равна 0?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy