Как будет правильнее, два варинта обработки массива.
Здравствуйте!
Допустим имеем массив: поле в всем знакомой игре Сапер. Данное поле состоит из элементов <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, время: 10:51. |