Jump to content
  • 0

Мини-конкурс


s0rr0w
 Share

Question

Цель мини-конкурса проста - по-новому посмотреть на привычные вещи. Звучит странно? Отнюдь! При промышленном производстве кода остается очень мало времени на развитие. И не всегда хватает времени на то, чтобы посидеть и подумать над тем, как что-то реализовать так, чтобы это было более-менее правильно.

Этот конкурс с довольно странным призом, но получить его могут многие. Если точнее, то призом будет бесценный опыт в решениях подобных задач и проблем. Хотите больше опыта? Просто принимайте участие. Согласен, что тяжелее всего будет самому первому смельчаку, который отважится на создание первого прототипа, но никто не запрещает делать несколько прототипов, постоянно улучшая свой или чужой код.

Правила просты. Я создаю некое подобие ТЗ. Это неточная формулировка какой-либо задачи (добавим чуток реализма, в жизни в 95% отсутствует не только ТЗ, но и понимание того, что хочет получить заказчик на выходе). Вы решаете эту задачу так, как вы бы ее решили, и выкладываете код в виде файла или текста сообщения. Мы коллективно исследуем код, задаем вопросы, подсказываем как надо решить. А потом выбираем победителя конкурса.

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

Запрещено корчить из себя умника без адекватного подтверждения своих слов.

Ну что, попробуем?

Задача №1.

Создаем приложение.

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

Link to comment
Share on other sites

Recommended Posts

  • 0

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

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

На вскидку придумал еще один вариант. Оборачивать таблицу в див с нужным именем (имя в таблице в фоксе задавать нельзя), и наткнувшись на див можно определить нужную таблицу, а следовательно строку и ячейку. Но подобный способ ведет к усложнению ХТМЛ, но учитываю что таблица создается динамически это не такой и большой недостаток.

function CreateSubTip(elem)
{
var row;
var cell;
var nextElem=elem;

for(i=0;i<=1;i)
{
if(nextElem.parentNode.tagName=='TR')
{
cell=nextElem;
row=nextElem.parentNode;
break;
}
else
{
nextElem=nextElem.parentNode;
}

if(nextElem.parentNode.tagName=='HTML')
{
alert("Error table for Grid");
break;
}
}

if(elem.nextSibling && elem.nextSibling.tagName=="DIV" && elem.nextSibling.name=="subDiv")
{
elem.parentNode.removeChild(elem.nextSibling);
row.className="";
}

else
{
row.className="ForRow";

subDiv=document.createElement("DIV");
subDiv.className="ForSubDiv";
subDiv.name="subDiv";
elem.parentNode.appendChild(subDiv);

var div = document.createElement("DIV");
div.className="ForDiv";
div.style.left=-cell.offsetLeft+2+"px";
div.style.width=row.offsetWidth-6+"px";

//Вот тут мы и присваиваем нужные атрибуты создаваемому списку
//for(i=1;i<row.cells.length;i++)div.innerHTML=div.innerHTML+" "+row.cells[i].innerHTML;
div.innerHTML=row.rowIndex;//Тут по идее вызываеться ф-я которая ищет запись в массиве по индексу строки

subDiv.appendChild(div);
}
}

Edited by Ogalig
Link to comment
Share on other sites

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

А кто тебе мешает использовать два, три, четыре класса? Десять?

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

(предпочел не выносить поиск в отдельные функции).

Это ты зря. Ведь столь замечательную функцию как getParentByTagName можно использовать множество раз.

Код нужно стараться всегда использовать повторно. Иначе ты погрязнешь в бесконечной писанине. Это не даст тебе никакого преимущества перед конкурентами.

На вскидку придумал еще один вариант. Оборачивать таблицу в див с нужным именем (имя в таблице в фоксе задавать нельзя), и наткнувшись на див можно определить нужную таблицу, а следовательно строку и ячейку. Но подобный способ ведет к усложнению ХТМЛ, но учитываю что таблица создается динамически это не такой и большой недостаток.

А что тебе даст таблица?

		for(i=0;i<=1;i)
{
if(nextElem.parentNode.tagName=='TR')
{
cell=nextElem;
row=nextElem.parentNode;
break;
}
else
{
nextElem=nextElem.parentNode;
}

if(nextElem.parentNode.tagName=='HTML')
{
alert("Error table for Grid");
break;
}
}

Это можно написать в несколько раз проще и более оптимально с точки зрения производительности.

Link to comment
Share on other sites

  • 0

А может продолжим? Я эту тему только сейчас спалил, интерестно на JS задачки порешать какие-нибудь, просто сложного на нем никогда ничего не писал :)

Если будет продолжение, то в свободное время буду с удовольствием принимать участие!

Edited by Vialls
Link to comment
Share on other sites

  • 0
А может продолжим? Я эту тему только сейчас спалил, интерестно на JS задачки порешать какие-нибудь, просто сложного на нем никогда ничего не писал ^_^

Если будет продолжение, то в свободное время буду с удовольствием принимать участие!

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

"Эксперты" почти ничего не пишут, Влад не может тоже.

Если есть желание - читай и пиши свой вариант.

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