Цитата:
Вы блондинка и это значение вашего свойства "цвет волос", по аналогии со свойством value опций списка. Вы стоите в очереди в магазине, а перед вами стоит дама у которой свойство "цвет волос" равно "брюнетка". Здесь вам не сложно понять, что дама в очереди имеет номер 1, а вы номер 2? Думаю, что не сложно. А также очевидно, что когда брюнетка отоварится и уйдет, то ваш номер в очереди станет равным 1, но при этом вы не станете брюнеткой и, думаю, тоже понятно. Также и опции списка, как впрочем и любая коллекция элементов, имеют такую нумерацию, которая называется индексацией, но в отличии от очереди в магазине она начинает не с 1, а с 0. Неделя у "буржуев", в отличии от нас пролетариев, начинается с воскресенья, то есть этот день в коллекции дней недели будет иметь номер/индекс равный 0. А последний день недели это суббота, с индексом 6. В этом выражении .options[d.getDay()||7].selected = true; сказано: взять опцию списка с индексом, который определяется индексом текущего дня недели и выбрать эту опцию. Свойство value выбранной опции будет определять значение списка (программный выбор). Выражение d.getDay()||7 будет работать по следующей логике: если день недели не воскресенье (getDay() возвращает не 0, а все что не 0, это true), то индекс выбираемой опции будет в пределах от 1 до 6, а если воскресенье (getDay() возвращает 0, false), то будет определен индекс равный 7. И это бы работало, если бы ваш список имел еще одну опцию перед понедельником, то есть 8 опций с индексами соответственно от 0 до 7. А у вас всего 7 опций с индексами от 0 до 6. Уменьшив на 1 возвращаемое функций getDay() значение, вы решаете проблему для понедельника по субботу включительно, а вот опции воскресенья с индексом 7 в вашем писке нет. Что нужно сделать? А вот выражение document.querySelector('#day_02').value = d.getDay() устанавливает значение списка, выбирает опцию его не по по его индексу, а по его свойству value. Если эти свойства будут иметь такие же значения как и значения возвращаемые функций getDay() (от 0 до 6), то такой проблемы как выше не возникает, более того, опции (дни недели) в списке могут иметь какой угодно порядок, так как индекс здесь не важен. |
Цитата:
|
Цитата:
|
Цитата:
|
laimas,
одним словом если использовать строчку document.querySelector('#day_01').options[d.getDay()||7].selected = true; в hrml надо использовать список опций По порядку с воскресенья По субботу, а если использовать строчку с value то можно опции располагать в любом порядке, главное чтобы валуе соответствовало воскресенье = 0 понедельник =1 и т.д. |
P. S. мне кажется что лучше просто не реагировать на посты русских
|
Русский,
да не волнуйся ты так, к окончанию школы может быть и выучишь english... |
...
|
а такой вопрос
document.addEventListener('DOMContentLoaded', function() { var d = new Date(), days = "Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота".split(" "); document.querySelector('#day').textContent = days[d.getDay()]; document.querySelector('#day_01').options[d.getDay()||7].selected = true; document.querySelector('#day_02').value = d.getDay() document.querySelector('#date').options[d.getDate()-1].selected = true; document.querySelector('#date_01').value = d.getDate(); document.querySelector('#month').options[d.getMonth()].selected = true; document.querySelector('#year').value = d.getFullYear(); }); почему в строке document.querySelector('#day_02').value = d.getDay()не надо точка с запятой, а в строке document.querySelector('#date_01').value = d.getDate();надо? и как правильно с месяцем document.querySelector('#month_01').value = d.getMonth()с точкой с запятой или без? |
Цитата:
a = b || c означает "присвоить a значение b ИЛИ c", при этом значение b будет присвоено только в случае если булево значение ее равно true (в данном случае не равно 0), иначе будет присвоено значение c. Вы хотите сделать так: a = b-1 || c Да, направление логики верное - сдвинуть индексы вверх на одну позицию. Но только такое решение логики также будет выдавать ошибки, и это легко проверить: <script> //это календарь буржуев var d = 'Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота'.split(' '), //а это наш календарь и ваш список s = 'Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье'.split(' '), a = []; //здесь итератор i имитирует номер дня возвращаемого функцией getDay() //и решение, в которое вы облекли свою логику и которое ошибочно for(var i=0; i<7; i++) a.push( d[i]+' > '+i +', номер дня после вычитания > '+(i-1) +', индекс для опции > '+(i-1||7) +', выбранный в списке день > '+s[i-1||7]); document.write(a.join('<br>')); </script> Так как нужно записать вашу логику для b || c, так чтобы в итоге получить индексы на 1 меньше? И ответ на этот вопрос нужно искать не в JS, а в математике из школьного курса. По поводу точек с запятой - именно в этом коде, так как он написан, каждое действие на новой строке, их вообще может и не быть, но если код "сжать", то он работать не будет. |
laimas,
получается что надо использовать строчку document.querySelector('#day_01').options[d.getDay()].selected = true;и список <select> <option>вс</option> <option>пн</option> ... <option>сб</option> вроде бы сейчас правильно... |
Да, либо поставить опции списка в том же порядке, что возвращает функция getDay(), либо использовать наш порядок, но уменьшая индекс на 1:
document.querySelector('#day_01').options[(d.getDay()||7)-1].selected = true; |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
laimas, обратите внимание, что суббота является седьмым днём, а значит следующий день недели, который в современном русском языке называется воскресением, является первым днём. Еврейское слово שַׁבָּת означает день отдыха. Как видите, воскресенье — с давних пор первый день недели. Также вы можете прочитать в христианских писаниях: «По прошествии же субботы, на рассвете первого дня недели, пришла Мария Магдалина и другая Мария посмотреть гроб». (Матфея 28:1, Синодальный перевод) В иудейских, христианских и мусульманских странах семидневная неделя начиналась с воскресенья. Россия не была исключением. ![]() ![]() ![]() И уже потом в СССР первым днём недели был объявлен понедельник... ![]() Из-за этого безосновательного поступка у русскоязычных читателей Священного Писания возникает теперь вопрос: «Почему суббота названа седьмым днём?» Блондинка, если вы создаёте дату new Date() и хотите изменять её при помощи графического интерфейса, то вы можете написать класс DateView, который позволяет изменять экземпляр даты. Таким образом у вас для каждой даты будет свой собственный редактор, который не мешает другим редакторам даты! Пример, как это может выглядеть... var myDate = new Date(); var view = new DateView(myDate); document.body.appendChild(view.element);Просто и легко! Вот реализация класса DateView с примером... <!DOCTYPE HTML> <html lang="ru"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <style> .calendar-view button, .calendar-view select, .calendar-view input { box-sizing: border-box; height: 2em; margin: 0; -webkit-appearance: none; -moz-appearance: none; appearance: none; padding: 0 0.5em; border: 0; background: white; font: inherit; } .calendar-view button[value] { min-width: 2em; font-weight: bold; border: 0 solid #eee; } .calendar-view button[value="-1"] { border-right-width: 1px; } .calendar-view button[value="1"] { border-left-width: 1px; float: right; } .calendar-view input[type=number] { width: 5em; } .calendar-view .control { display: inline-block; border: 1px solid #aaa; margin: 0.1em; border-radius: 0.3em; overflow: hidden; } @media(max-width: 250px) { .calendar-view .control { display: block; } } </style> <script> function DateView(date) { this.date = date; this.element = document.createElement("div"); this.element.className = "calendar-view"; this.header = document.createElement("div"); this.element.appendChild(this.header); this.dateElement = document.createElement("select"); this.dateElement.addEventListener("change", function() { view.date.setDate(this.value); view.update(); }); this.element.appendChild(this.dateElement); this.addControls(this.dateElement, "Date"); this.monthElement = document.createElement("select"); this.monthElement.addEventListener("change", function() { view.date.setMonth(this.value); view.update(); }); this.element.appendChild(this.monthElement); this.addControls(this.monthElement, "Month"); this.yearElement = document.createElement("input"); this.yearElement.type = "number"; this.yearElement.addEventListener("change", function() { view.date.setFullYear(this.value); view.update(); }); this.element.appendChild(this.yearElement); this.addControls(this.yearElement, "FullYear"); var view = this; view.update(); } DateView.prototype = { constructor: DateView, update: function() { var days = "Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота".split(" "); var monthes = "января февраля марта апреля мая июня июля августа сентября октября ноября декабря".split(" "); this.header.textContent = days[this.date.getDay()]; var date = this.date.getDate(); var html = ''; var days = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 0).getDate(); for(var i = 1; i <= days; i++) html += '<option '+ (i === date ? ' selected' : '')+ '>'+ i+ '</option>'; this.dateElement.innerHTML = html; var month = this.date.getMonth(); var html = ''; for(var i = 0; i < 12; i++) html+='<option value="'+ i+ '"'+ (i === month ? ' selected' : '')+ '>'+ monthes[i]+ '</option>'; this.monthElement.innerHTML = html; this.yearElement.value = this.date.getFullYear(); }, addControls: function(element, component) { var view = this; var controlField = document.createElement("div"); controlField.className = "control"; element.parentNode.insertBefore(controlField, element); var prevButton = document.createElement("button"); prevButton.textContent = "−"; prevButton.value = "-1"; prevButton.addEventListener("click", handler); var nextButton = document.createElement("button"); nextButton.textContent = "+"; nextButton.value = "1"; nextButton.addEventListener("click", handler); controlField.appendChild(prevButton); controlField.appendChild(element); controlField.appendChild(nextButton); element.controls = [prevButton, nextButton]; function handler() { view.date["set" + component](view.date["get" + component]() + Number(this.value)); view.update(); } } }; // Пример использования document.addEventListener("DOMContentLoaded", function() { var myDate = new Date(); var view = new DateView(myDate); document.body.appendChild(view.element); }); </script> </head> <body></body> </html> |
Malleys,
а чем не вариант установить на странице выпадающий список с одной опцией, в которой и отображается день недели, и нету возможности выбора, мне кажется этот вариант проще, чем наделать скриншотов с разных браузеров обрезать выпадающий список и эти изображения использовать для спана в качестве фонового изображения... |
Цитата:
Теперь у вас новая навязчивая идея — выпадающий список с одной опцией и нету возможности выбора. А зачем вам такое? Решение — используйте текстовый узел (text node)! Несколько месяцев назад у вас была другая навязчивая идея — нажать на <div>. Решение — используйте <button>. Следуйте этим простым советам, и у вас всё получится! Кстати, пример, который я сделал, он работает на вашем телефоне? Если нет, то попытайтесь найти в примере то, чего не было в 2011 году! Если да, то всё равно разберите пример, попытайтесь понять, что делает каждый участок кода! Цитата:
Если вы читали выше, то у вас определённо должен был возникнуть вопрос, а как же всё-таки называлось воскресенье! Воскресенье называлось — недѣлей (ст.‑слав. недѣ́ля, то есть днём, когда «не делают», то есть не работают, во всех остальных славянских языках, этот день называется «недѣлей» (польск. niedziela, укр. неділя, хорват. nedjelja, болгар. неделя, чеш. neděle и т. д.)) Соответственно...
Именно такой порядок дней вы видите в календарях России (однако до тех пор, пока не начали бесноваться безбожники СССР), в странах обоих Америк, Японии, Израиля и пр. стран. Три дня до среды, среда и три дня после среды составляют седмицу. Вот, смотрите как симметрично! 3 + 1 + 3 = 7 А у вас получается, что середина недели — четверг, среда куда-то набок съехала, якобы нашли ошибку в Писании, а логика, что вторник — это день №2, намекает на то, что и длины вы измеряете не от 0 см, а от 1 см! (Хотя такого может и не быть! Парадокс! Однако не удивительно, что вы говорили о взаимозаменяемости времени и расстояния!) Цитата:
Цитата:
|
Malleys,
после революции был советский календарь с пятидневной неделей, в настоящее время страны СНГ пользуются календарём с первым днем недели понедельник, и от этого никуда не деться... скрипт в предыдущем посте работает |
вот приемлимое для меня решение
document.addEventListener('DOMContentLoaded', function() { var d = new Date(), days = "Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота".split(" "); document.querySelector('#day').textContent = days[d.getDay()]; document.querySelector('#day_01').options[d.getDay()||7].selected = true; document.querySelector('#day_02').value = d.getDay() document.querySelector('#date').options[d.getDate()-1].selected = true; document.querySelector('#date_01').value = d.getDate(); document.querySelector('#month').options[d.getMonth()].selected = true; document.querySelector('#year').value = d.getFullYear(); }); для 3-5 строчки этого кода использовать следующий html <select><option id="day"></option></select> |
Цитата:
По сути вы просто один раз выводите дату и всё! Таким образом, если вы всё-таки примените, то что я вам написал (а именно то, что вместо <select><option id="day"></option></select> вам следует использовать текстовый узел), то вывод даты станет приемлемым! Цитата:
<body> <script> var days = "Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота".split(" "); var monthes = "января февраля марта апреля мая июня июля августа сентября октября ноября декабря".split(" "); var date = new Date(); var textNode = document.createTextNode(days[date.getDay()] + ", " + date.getDate() + " " + monthes[date.getMonth()] + " " + date.getFullYear() + " года."); document.body.appendChild(textNode); </script> |
Malleys,
ну незнаю как ещё объяснить, есть форма с двумя списками для даты и месяца и полем ввода, в эту форму надо добавить текстовый узел выводящий день недели, но с помощью стилей изменить внешний вид этого текстового узла, чтобы он визуально не отличался от списка... |
Цитата:
Вот мой вариант — последняя часть сообщения №67 Вы можете поменять стили, как хотите! (Например, что вам стоит добавить такую же закруглённую рамку для дня недели, как в том примере это сделано у <input> и <select>?) |
Malleys,
пост 74, можно использовать <span id="day">и внутрь поместить див с нулевой высотой/шириной задать диву рамку 3-5 пикселей и левую правую нижнюю рамку сделать прозрачной, тем самым нарисовав треугольник, типа как в списке, но надо чтобы этот треугольник не отличался визуально от аналогичного в селекте, а он сильно различается в разных браузерах... |
Цитата:
Цитата:
<span id="day">Воскресенье</span> <style> #day { -webkit-appearance: menulist; padding-right: 1em; } </style> Только зачем вам эта стрелка? Это же не всплывающий список! |
Malleys,
не во всех браузерах это сработает, в том числе и в Habbit browser, который ты когда то скачал... Цитата:
|
Цитата:
Цитата:
Вы ещё можете использовать треугольник ▼. <span id="day">Воскресенье ▼</span> Цитата:
Если говорить о неделе, начало которой в понедельник, то получается, что точка отсчёта — понедельник. И тогда получается, что по прошествии одного дня с понедельника получается вторник, по прошествий трёх дней с понедельника получается четверг, и т.д. Что как раз таки не логично, поэтому стали использовать порядковые числительные для объяснения такой недели. Т. е. второй день — вторник, четвёртый день — четверг, и т.д. (Например, тогда получается, что во вторник днём с начала недели прошёл 1 день и ещё столько-то часов вторника) Цитата:
|
Цитата:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Calendar</title> </head> <body> <style> .month, .month.vert .week, .day { display:inline-block; } .month.vert .day { display:block; } .day { border: 1px solid #ccc; width: 30px; line-height: 30px; text-align: center; margin: 1px; } </style> <div class="month"></div> <script> var calendar = { update: function (year, month) { this.days.length = 7; var stepDay = new Date(year, month, 1); stepDay.setDate(1 - stepDay.getDay()); var lastDay = new Date(year, month + 1, 0); lastDay.setDate(lastDay.getDate() + 6 - lastDay.getDay()); while (stepDay <= lastDay) { this.days.push(stepDay.getDate()); stepDay.setHours(24); } }, render: function () { var html = ''; for (var i = 0, j = 0; i < this.days.length; j = ++i % 7) { if (j == 0) html += '<div class="week">'; html += '<div class="day">' + this.days[i] + '</div>'; if (j == 6) html += '</div>'; } this.element.innerHTML = html; }, toggle: function () { this.element.classList.toggle('vert'); } }; var today = new Date, thisYear = today.getFullYear(), thisMonth = today.getMonth(); calendar.days = ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб']; calendar.element = document.querySelector('.month'); calendar.element.addEventListener('click', function () { calendar.toggle() }); calendar.update(thisYear, thisMonth); calendar.render(); </script> </body> </html> |
Блондинка,
вам дали алгоритм тут Цитата:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Calendar</title> </head> <body> <style> .month, .month.vert .week, .day { display: inline-block; } .month.vert .day { display: block; } .day { border: 1px solid #ccc; width: 30px; line-height: 30px; text-align: center; margin: 1px; } </style> <div class="month"></div> <script> var calendar = { update: function(year, month) { this.days.length = 7; var stepDay = new Date(year, month, 1); stepDay.setDate(stepDay.getDate() + 0 - ((stepDay.getDay() + 6) % 7)); var lastDay = new Date(year, month + 1, 0); lastDay.setDate(lastDay.getDate() + 6 - ((lastDay.getDay() + 6) % 7)); while (stepDay <= lastDay) { this.days.push(stepDay.getDate()); stepDay.setHours(24); } }, render: function() { var html = ''; for (var i = 0, j = 0; i < this.days.length; j = ++i % 7) { if (j == 0) html += '<div class="week">'; html += '<div class="day">' + this.days[i] + '</div>'; if (j == 6) html += '</div>'; } this.element.innerHTML = html; }, toggle: function() { this.element.classList.toggle('vert'); }, }; var today = new Date(), thisYear = today.getFullYear(), thisMonth = today.getMonth(); calendar.days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']; calendar.element = document.querySelector('.month'); calendar.element.addEventListener('click', function() { calendar.toggle(); }); calendar.update(thisYear, thisMonth); calendar.render(); </script> </body> </html> |
Блондинка,
можно так ... <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Calendar</title> </head> <body> <style> .day { border: 1px solid #ccc; width: 30px; line-height: 30px; text-align: center; margin: 1px; background-color: #B0C4DE; } .month { display: flex; flex-wrap:wrap; width: 238px; height: 238px; justify-content: space-around; margin: 30px auto; } .month.vert{ flex-direction: column; } .day:nth-child(7n + 6), .day:nth-child(7n + 7){ background-color: #FF85C6; } .day:nth-child(-n + 7) { color: #FFFFFF; } </style> <div class="month"></div> <script> var calendar = { update: function(year, month) { var stepDay = new Date(year, month, 1); stepDay.setDate(stepDay.getDate() - ((stepDay.getDay()||7) - 1)); var lastDay = new Date(stepDay); lastDay.setDate(lastDay.getDate() + 41); while (stepDay <= lastDay) { this.days.push(stepDay.getDate()); stepDay.setHours(24); } }, render: function() { var html = ''; for (var i = 0; i < this.days.length; i++) { html += '<div class="day">' + this.days[i] + '</div>'; } this.element.innerHTML = html; }, toggle: function() { this.element.classList.toggle('vert'); }, }; var today = new Date(), thisYear = today.getFullYear(), thisMonth = today.getMonth(); calendar.days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']; calendar.element = document.querySelector('.month'); calendar.element.addEventListener('click', function() { calendar.toggle(); }); calendar.update(thisYear, thisMonth); calendar.render(); </script> </body> </html> |
рони,
как то не очень с этими строчками var lastDay = new Date(stepDay); lastDay.setDate(lastDay.getDate() + 41); слишком много дней следующего месяца показано |
Цитата:
|
рони,
вариант в 83 посте как то лучше, ведь можно стилями задать фиксированную высоту и ширину, а ячейки будут менять размеры взависимости от количества строк и колонок... рони, а такой вопрос, в 83 посте как сделать чтобы при загрузке страницы сначала отображался вертикальный вариант |
Цитата:
<div class="month vert"></div> |
Цитата:
|
как правильно использовать input type month и как установить переключение с дива на кнопку?
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Calendar</title> </head> <body> <style> #calendar { width: 238px; height: 270px; padding: 3px; border: 1px solid #a9a9a9; } #navigation_panel { width: 228px; padding: 3px; margin-bottom: 3px; border: 1px solid #a9a9a9; display: inline-block; } .month, .month.vert .week, .day { display: inline-block; } .month.vert .day { display: block; } .day { border: 1px solid #a9a9a9; width: 30px; line-height: 30px; text-align: center; margin: 1px; } input[type=month] { backgroud-color: #ffffff; border: 1px solid #a9a9a9; } #switching { background-color: #fff; border: 1px solid #a9a9a9; } </style> <div id="calendar"> <div id="navigation_panel"> <input type="month"> <button id="switching">⇘</button> </div> <div class="month vert"></div> <script> var calendar = { update: function(year, month) { this.days.length = 7; var stepDay = new Date(year, month, 1); stepDay.setDate(stepDay.getDate() + 0 - ((stepDay.getDay() + 6) % 7)); var lastDay = new Date(year, month + 1, 0); lastDay.setDate(lastDay.getDate() + 6 - ((lastDay.getDay() + 6) % 7)); while (stepDay <= lastDay) { this.days.push(stepDay.getDate()); stepDay.setHours(24); } }, render: function() { var html = ''; for (var i = 0, j = 0; i < this.days.length; j = ++i % 7) { if (j == 0) html += '<div class="week">'; html += '<div class="day">' + this.days[i] + '</div>'; if (j == 6) html += '</div>'; } this.element.innerHTML = html; }, toggle: function() { this.element.classList.toggle('vert'); }, }; var today = new Date(), thisYear = today.getFullYear(), thisMonth = today.getMonth(); calendar.days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']; calendar.element = document.querySelector('.month'); calendar.element.addEventListener('click', function() { calendar.toggle(); }); calendar.update(thisYear, thisMonth); calendar.render(); </script> </div> </body> </html> |
рони,
может подскажешь, есть ли на форуме реализация не вертикально-горизонтального, а только вертикального календаря? для сайта мне достаточно одного гоизонтального календаря, а вертикальный меня заинтересовал, чтобы на одной странице можно было разместить календарь на месяц и на год, а потом просто просто сохранить скриншот и распечатать на бумаге формата а4 |
Блондинка,
не могу подсказать |
кто подскажет, сложно ли сгенерировать сетку вертикального календаря на текущий месяц с помощью таблицы?
|
1.) кто может сделать вертикальный календарь ?
2.) есть ли css свойство у технологии flexbox анолигичное border-spacing для таблиц ? |
бюджет то найдется,
на дивах или таблица? на карточку можно оплатить? |
Цитата:
; }); </script> </head> <body> <div id="hours"></div> <div id="minutes"></div> <div id="seconds"></div> <div id="day"></div> <div id="date"></div> <div id="month"></div> <div id="month_name"></div> <div id="year"></div> </body> </html>] |
на этом форуме кто нибудь может объяснить как в элементы с определенными id вставить соответствующие компоненты даты? при наличии такого hrml-кода...
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title></title> <style> div { font: 14px serif; border: 1px solid #ccc; padding: 5px; margin-bottom: 5px; text-align: center; } </<style> <script> document.addEventListener('DOMContentLoader', function() { var d = new Date(); var days = "Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота".split(" "); document.querySelector('day').textContent = daus[ d.getDay()]; }); </script> </head> <body> <div id="hours"></div> <div id="minutes"></div> <div id="seconds"></div> <div id="day"></div> <div id="date"></div> <div id="month"></div> <div id="month_name"></div> <div id="year"></div> </body> </html> |
Часовой пояс GMT +3, время: 09:17. |