Как будет правильнее, два варинта обработки массива.
Здравствуйте!
Допустим имеем массив: поле в всем знакомой игре Сапер. Данное поле состоит из элементов <img />. Необходимо, что бы при нажатии на пустую клетку - клетки стоящие рядом то же открывались если они пустые. Вопрос: Как правильнее и где быстрее будет работать браузер 1. Представить массив игрового поля, в виде двумерного массива
for (x=0; x<=XxX; x++)
{
for (y=0; y<=YyY; y++)
{
var myElem = document.createElement('img');
document.getElementById('game').appendChild(myElem);
myElem.src = '......';
myElem.onclick = f_keyPress;
a_block[x][y] = myElem;
}
}
с таким соответственно легче работать и проще проверить, что бы при проверке не вылететь за края поля и не проверить несуществующего элемента. 2. Или одномерного
for (i=1; i<=(XxX * YyY); i++)
{
var myElem = document.createElement('img');
document.getElementById('game').appendChild(myElem);
myElem.src = '......';
myElem.onclick = f_keyPress;
}
myElem = document.getElementById('game')
a_block = myElem.getElementsByTagName('img');
Здесь что бы не мудрить с расчетами по проверке не выходит ли элемент за приделы поля я применил проверку на существование данного объекта:
if (typeof a_block[i-XxX-1] == 'object') {.......}
|
Думаю второй вариант быстрее, но первый удобнее.
Но это все экономия на спичках. Тормоза если и появятся, то не от таких мелочей, а от более грубых недочетов. |
Я так же думаю, просто бывали случаи с CSS или например построение HTML по поводу в таблицах или в блоках....
Вообщем вопрос как правильнее с точки зрения программного кода. |
Оба варианта полное Г. Никогда не суйте в DOM, элементы в цикле. Сначала нужно подготовить данные, а уж потом выставлять их в DOM.
var container = document.createDocumentFragment();
for(var i = 0; i < XxX; i++) {
var img = container.appendChild(document.createElement('img');
img.src = '....';
img.onclick = f_keyPress;
}
document.getElementById('game').appendChild(container);
|
Да и вобще, тут канвас нужен а не гора картинок. И если уж и на DOM делать, то почему картинки? Тут же налицо таблица.
Эффективней обработчик навешать на контейнер (делегировать обрабоку события) |
Цитата:
1. А, это общепринятое правило? 2. С какой версии JS работает метод по созданию целого куска кода? |
Цитата:
2. С таблицей получится слишком грамостко и как без картинок если же все что мы видим на экране это и есть картинки?? 3. А обработчик будет обрабатывать каждый элемент отдельно если его повесить на контейнер? |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
CSS открыл как три года назад. |
| Часовой пояс GMT +3, время: 22:09. |