Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 7

Объяснить код табличного процессора на JS

04.06.2015, 08:34. Показов 892. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто-нибудь,может мне объяснить последовательность операций в js коде.Хочу использовать этот скрипт для написания курсовой,помогите!!!
Вот сам непонятный скрипт http://m.habrahabr.ru/post/202304/
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2015, 08:34
Ответы с готовыми решениями:

В среде табличного процессора MS Excel на основе следующих таблиц создать базу данных(
Дали такую ​​задачу, как сделать толком незнаю, если кто-то поможет буду очень благодарен. Спасибо!

Объяснить код
Здравствуйте, скоро экзамен по компьютерной графике. Учительница сказала что будет задание нарисовать что то(точка, кружок, квадрат и...

Объяснить код
Пожалуйста, объясните код, а то я ничего не понимаю. Если не трудно, то прям каждую строчку. За раннее благодарю! Могу предоставить...

11
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
04.06.2015, 18:00
А почему подобный код должен быть понятным? Он и так гораздо понятнее, чем обычно.
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 7
05.06.2015, 09:34  [ТС]
Qwertiy, я просто JavaScript не изучал,знаю Паскаль,можете ли вы объяснить пошагово,что выполняется в программе
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
06.06.2015, 12:24
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
for (var i=0; i<6; i++) {// генератор таблицы, он ищет таблицу и вставляет туда строку, а в строку уже и ячейки
    var row = document.querySelector("table").insertRow(-1);
    for (var j=0; j<6; j++) {
        var letter = String.fromCharCode("A".charCodeAt(0)+j-1);
        row.insertCell(-1).innerHTML = i&&j ? "<input id='"+ letter+i +"'/>" : i||letter;
    }
}
 
var DATA={}// это копия таблицы, только уже скомпилированная
, INPUTS=[].slice.call(document.querySelectorAll("input"));// тут получают nodelist и превращают его в массив, для более удобной обработки
INPUTS.forEach(function(elm) {// соответственно сама обработка таблицы(самое интересное), elem это как раз таки input 
    elm.onfocus = function(e) {// как только elem получает фокус
        e.target.value = localStorage[e.target.id] || "";// мы берём формулу из локального хранилища
    };
    elm.onblur = function(e) {// как только elem теряет фокус
        localStorage[e.target.id] = e.target.value;// мы записываем его формулу в локалное хранилище
        computeAll();// "компилим" таблицу
    };
    var getter = function() {// функ-я преобразования формулы в её вывод
        var value = localStorage[elm.id] || "";// берём формулу из локального франилища
        if (value.charAt(0) == "=") {// если первый знак "=" то преобразовываем формулу
            with (DATA) return eval(value.substring(1));// конструкция with позволяет не использоватя "префикс" тогда формулы были бы такого вида: =DATA.a1+DATA.a4, а eval это фукция исполнения строки, ну типа встроенного компилятора языка js
        } else { return isNaN(parseFloat(value)) ? value : parseFloat(value); } // если не "=" то либо берём значение из ячейки, либо превращаем значение в число
    };
    Object.defineProperty(DATA, elm.id, {get:getter});// запись скомпилиных значений в DATA, =A1+2 -> значение A1 + 2
    Object.defineProperty(DATA, elm.id.toLowerCase(), {get:getter});// тоже самое но только маленькими буквами, =a1 + 2 -> A1 + 2
});
(window.computeAll = function() {// функця компилер, она перерасчитывает всю таблицу учитывая новые значения
    INPUTS.forEach(function(elm) { try { elm.value = DATA[elm.id]; } catch(e) {} });
})();
Добавлено через 1 минуту
только не забудьте поставить копирайт zag2art'a

Добавлено через 1 минуту
Qwertiy, я с вам согласен, это по-моему лучшая программа для того 30 строчного "конкурса"
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
06.06.2015, 23:36
Цитата Сообщение от BANO Посмотреть сообщение
} else { return isNaN(parseFloat(value)) ? value : parseFloat(value); } // если не "=" то либо берём значение из ячейки, либо превращаем значение в число
Кстати, в этой строке баг. Если ввести что-то типа 12qqq, то отобразится 12 и только на фокус будет показываться оригинальное значение.

Цитата Сообщение от BANO Посмотреть сообщение
Object.defineProperty(DATA, elm.id, {get:getter});// запись скомпилиных значений в DATA, =A1+2 -> значение A1 + 2
Не совсем. Записывается геттер, и это неспроста. Теперь DATA обладает свойством с именем ячейки, при обращении к которому значение будет пересчитываться. Та штука с with выше будет вызывать именно такие свойства, заставляя пересчитаться и другие ячейки - рекурсия такая.

И ещё две строчки недокомментированные остались. Причём обе с подвохом:

INPUTS.forEach(function(elm) { try { elm.value = DATA[elm.id]; } catch(e) {} });
Вычисляем значение ячейки. catch нужен чтобы игнорировать переполнение стека - это и есть та обработка циклических ссылок, о которой говорится в описании.

})();
Не только присвоили функцию вычисления таблицы, но и вызвали её. Если страница только открыта и накаких изменений ещё внесено не было, то значения всё равно вычислятся сразу.

Цитата Сообщение от BANO Посмотреть сообщение
Qwertiy, я с вам согласен, это по-моему лучшая программа для того 30 строчного "конкурса"
Я не следил за ним. Видел несколько подобных там. Змейка ещё была, помню. А где-то была змейка в один inline-обработчик (причём такой, что его даже в кавычки заключать не пришлось) с единственным канвосом.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
09.06.2015, 16:44
Qwertiy, ну в той строке не баг, а просто использование стандартного метода
это понятно что будет только число браться, я тоже учил методы преобразования строк в числа, и не только десятичные

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

конечно можно изменить эту строку на регулярное выражение, но тогда синтаксис делается менее устойчивым к "случайным" буквам
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
09.06.2015, 17:02
Цитата Сообщение от BANO Посмотреть сообщение
ну в той строке не баг, а просто использование стандартного метода
В этом использовании баг и заключается.
Всё что не число должно становиться строкой.

Цитата Сообщение от BANO Посмотреть сообщение
конечно можно изменить эту строку на регулярное выражение
Можно, но зачем? Можно же так:
JavaScript
1
+value || value==0 && value.trim().length
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
09.06.2015, 17:07
Qwertiy, я с вами согласен, просто сначала не понял к чему вы ведёте
а на самом деле и действительно не доработка, жаль меня нету на хабрахабре, но если вы можете пожалуйста киньте этот код в комментарии к статье про этот 30 строчный exel
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
09.06.2015, 18:45
Цитата Сообщение от BANO Посмотреть сообщение
жаль меня нету на хабрахабре
Меня тоже...
0
09.06.2015, 22:28

Не по теме:

Qwertiy, как я понял туда только по пригласительным

0
 Аватар для alexsamos33
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
09.06.2015, 23:27
Цитата Сообщение от Qwertiy Посмотреть сообщение
Меня тоже...
А я есть.
0
09.06.2015, 23:35

Не по теме:

Цитата Сообщение от BANO Посмотреть сообщение
как я понял туда только по пригласительным
Ну типа того. Надо чтобы кому-то понравилась твоя статья. Но я даже не пробовал.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.06.2015, 23:35
Помогаю со студенческими работами здесь

Объяснить код
Всем добрый день. Есть код public class Dog { String name; public static void main(String args ){ Dog dog1 =...

Объяснить код
Написать программу, которая вычисляет частичную сумму ряда \sum_{k=1}^{\infty}ln(1+\frac{1}{k}) Расчет должен производиться двумя...

Объяснить код
Всем привет, может кто ни будь разъяснить мне этот код пожалуйста. А то я либо спёкся уже, или изначально был тупым. Но я вообще не понимаю...

Объяснить код
Здравствуйте. Помогите пожалуйста прописать, что происходит в данном коде по строкам #include &lt;cstdio&gt; #include &lt;vector&gt;...

Объяснить код
Здравствуйте, может у кого есть справочник или хоть что то объясняющее на понятном языке как в важных темах этого раздела тема System.IO......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru