質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

0回答

423閲覧

カレンダーアプリで日付をマークする方法

dai3dai3_4or5

総合スコア2

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

1クリップ

投稿2019/08/12 18:05

前提・実現したいこと

製作中のカレンダーアプリで、あるページを開いたときにカレンダーの開いた日にちに目印を残す機能を実装したい。

該当のソースコード

javascript

1;(function(){ 2 var $$ = function(){ 3 $$LIB.prototype.setEvent(window, "load", $$.prototype.start); 4 }; 5 6 $$.prototype.start = function(){ 7 if(document.querySelector($$CALENDAR.prototype.option.table) === null){return;} 8 9 var d = $$.prototype.getUrlDate(); 10 var data = (d === null)?{}:{date:{year:d.y,month:d.m,day:d.d}}; 11 new $$CALENDAR(data); 12 }; 13 $$.prototype.getUrlDate = function(){ 14 var url = $$LIB.prototype.urlinfo(); 15 if(typeof url.query.date !== "undefined"){ 16 return { 17 y:url.query.date.substr(0,4), 18 m:url.query.date.substr(4,2), 19 d:url.query.date.substr(6,2) 20 }; 21 } 22 else{ 23 return null; 24 } 25 }; 26 27 28 $$CALENDAR = function(option){ 29 this.setOption(option); 30 this.option.calendar = document.querySelector(this.option.table); 31 this.setYM(this.option.date); 32 this.setDate(); 33 this.setEvent(); 34 }; 35 36 $$CALENDAR.prototype.option = { 37 calendar : null, 38 table : ".calendar-table", 39 year : ".calendar-year", 40 month : ".calendar-month", 41 head : ".calendar-head", 42 title : ".calendar-title", 43 week : ".calendar-week", 44 body : ".calendar-body", 45 prev : ".calendar-table .calendar-title .prev", 46 next : ".calendar-table .calendar-title .next", 47 date : { 48 year : null, 49 month : null, 50 day : null 51 }, 52 click : function(){}, 53 $EOL:0 54 }; 55 56 $$CALENDAR.prototype.setOption = function(option){ 57 for(var i in option){ 58 this.option[i] = option[i]; 59 } 60 }; 61 62 $$CALENDAR.prototype.setYM = function(date){ 63 64 // alert(year+"/"+month); 65 var d = new Date(); 66 date.year = (date.year === null)?d.getFullYear():date.year; 67 date.month = (date.month === null)?d.getMonth()+1 :date.month; 68 date.day = (date.day === null)?d.getDate() :date.day; 69 70 // this.option.date = {year:year.textContent , month:month.textContent , day:d.getDate()}; 71 72 this.option.calendar.querySelector(this.option.year).innerHTML = date.year; 73 this.option.calendar.querySelector(this.option.month).innerHTML = date.month; 74 75 return this.option.date; 76 }; 77 $$CALENDAR.prototype.getYM = function(){ 78 var y = $$CALENDAR.prototype.option.calendar.querySelector($$CALENDAR.prototype.option.year).textContent; 79 var m = $$CALENDAR.prototype.option.calendar.querySelector($$CALENDAR.prototype.option.month).textContent; 80 return {year:Number(y) , month:Number(m)}; 81 }; 82 83 $$CALENDAR.prototype.setDate = function(){ 84 var d = new Date(); 85 var year = this.option.date.year; 86 var month = this.option.date.month; 87 var day = this.option.date.day; 88 89 var startDay = new Date(year, month-1, 1).getDay();// その月の最初の日の曜日を取得 90 var endDay = new Date(year, month , 0).getDay();// その月の最後の日の曜日を取得 91 var endDate = new Date(year, month , 0).getDate(); 92 var textDate = 1; // 日付(これがカウントアップされます) 93 var html =''; // テーブルのHTMLを格納する変数 94 95 for (var row = 0; row < (endDate + startDay + (7-endDay-1))/7; row++){ 96 html += '<tr>'; 97 for (var col = 0; col < 7; col++) { 98 if (row === 0 && col < startDay){ 99 html += "<td class='nil'>&nbsp;</td>"; 100 } 101 else if (endDate < textDate) { 102 html += "<td class='nil'>&nbsp;</td>"; 103 } 104 else{ 105 var cls = (day == textDate)?"current":"date"; 106 cls = (new Date(year, month-1, textDate) > new Date(d.getFullYear(), d.getMonth(), d.getDate()))?"over":cls; 107 html += '<td class="'+cls+'">'+textDate+'</td>'; 108 textDate++; 109 } 110 } 111 html += '</tr>'; 112 } 113 this.option.calendar.querySelector(this.option.body).innerHTML = html; 114 }; 115 116 $$CALENDAR.prototype.setEvent = function(){ 117 // month-move 118 var prev = document.querySelector(this.option.prev); 119 var next = document.querySelector(this.option.next); 120 $$LIB.prototype.setEvent(prev, "click", $$CALENDAR.prototype.prevCalendar); 121 $$LIB.prototype.setEvent(next, "click", $$CALENDAR.prototype.nextCalendar); 122 // day-click 123 var days = this.option.calendar.querySelectorAll(".date"); 124 for(var i=0; i<days.length; i++){ 125 $$LIB.prototype.setEvent(days[i], "click", $$CALENDAR.prototype.dayClick); 126 } 127 }; 128 129 $$CALENDAR.prototype.prevCalendar = function(){ 130 var d = $$CALENDAR.prototype.getYM(); 131 var y = d.year; 132 var m = d.month+1; 133 if(m === 0){ 134 y -= 1; 135 m = 12; 136 } 137 new $$CALENDAR({date:{year:d.year,month:(d.month-1),day:1}}); 138 }; 139 $$CALENDAR.prototype.nextCalendar = function(){ 140 var d = $$CALENDAR.prototype.getYM(); 141 var y = d.year; 142 var m = d.month+1; 143 if(m === 13){ 144 y += 1; 145 m = 1; 146 } 147 new $$CALENDAR({date:{year:y,month:m,day:1}}); 148 }; 149 150 $$CALENDAR.prototype.dayClick = function(e){ 151 var elm = e.target; 152 var y = $$CALENDAR.prototype.option.date.year; 153 var m = $$CALENDAR.prototype.numKeta($$CALENDAR.prototype.option.date.month); 154 var d = $$CALENDAR.prototype.numKeta(elm.textContent); 155 console.log(y+"/"+m+"/"+d); 156 var url = $$LIB.prototype.urlinfo(); 157 var newQuery = []; 158 for(var i in url.query){ 159 if(i === "date"){continue;} 160 newQuery.push(i+"="+url.query[i]); 161 } 162 newQuery.push("date="+y+m+d); 163 location.href = url.url+"?"+newQuery.join("&"); 164 } 165 166 $$CALENDAR.prototype.numKeta = function(num){ 167 num = Number(num); 168 if(num < 10){ 169 return "0" + num.toString(); 170 } 171 else{ 172 return num; 173 } 174 }; 175 176 177 /* Library */ 178 179 var $$LIB = function(){}; 180 181 $$LIB.prototype.urlinfo = function(uri){ 182 if(!uri){uri = location.href;} 183 var data={}; 184 //URLとクエリ分離分解; 185 var query=[]; 186 if(uri.indexOf("?")!=-1){query = uri.split("?")} 187 else if(uri.indexOf(";")!=-1){query = uri.split(";")} 188 else{ 189 query[0] = uri; 190 query[1] = ''; 191 } 192 //基本情報取得; 193 var sp = query[0].split("/"); 194 var data={ 195 url:query[0], 196 dir:$$LIB.prototype.pathinfo(uri).dirname, 197 domain:sp[2], 198 protocol:sp[0].replace(":",""), 199 query:(query[1])?(function(q){ 200 var data=[]; 201 var sp = q.split("&"); 202 for(var i=0;i<sp .length;i++){ 203 var kv = sp[i].split("="); 204 if(!kv[0]){continue} 205 data[kv[0]]=kv[1]; 206 } 207 return data; 208 })(query[1]):[], 209 }; 210 return data; 211 }; 212 213 $$LIB.prototype.pathinfo = function(p){ 214 var basename="", 215 dirname=[], 216 filename=[], 217 ext=""; 218 var p2 = p.split("?"); 219 var urls = p2[0].split("/"); 220 for(var i=0; i<urls.length-1; i++){ 221 dirname.push(urls[i]); 222 } 223 basename = urls[urls.length-1]; 224 var basenames = basename.split("."); 225 for(var i=0;i<basenames.length-1;i++){ 226 filename.push(basenames[i]); 227 } 228 ext = basenames[basenames.length-1]; 229 return { 230 "hostname":urls[2], 231 "basename":basename, 232 "dirname":dirname.join("/"), 233 "filename":filename.join("."), 234 "extension":ext, 235 "query":(p2[1])?p2[1]:"", 236 "path":p2[0] 237 }; 238 }; 239 240 //ハイフン区切りを大文字に変換する。 241 $$LIB.prototype.camelize = function(v){ 242 if(typeof(v)!='string'){return} 243 return v.replace(/-([a-z])/g , function(m){return m.charAt(1).toUpperCase();}); 244 }; 245 246 // URL切り替え処理 [key , value , flg(before,*after)] 247 $$LIB.prototype.setUrl = function(key,val,flg){ 248 var urlinfo = $$LIB.prototype.urlinfo(); 249 var query = []; 250 if(flg==="before"){ 251 query.push(key + "=" + val); 252 } 253 for(var i in urlinfo.query){ 254 if(i !== key){ 255 query.push(i + "=" + urlinfo.query[i]); 256 } 257 } 258 if(flg!=="before"){ 259 query.push(key + "=" + val); 260 } 261 history.pushState(null,null,urlinfo.url+"?"+query.join("&")); 262 }; 263 264 $$LIB.prototype.number_format = function(num){ 265 num = num.toString(); 266 var tmpStr = ""; 267 while (num != (tmpStr = num.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))){num = tmpStr;} 268 return num; 269 }; 270 271 $$LIB.prototype.setEvent = function(target, mode, func){ 272 //other Browser 273 if (typeof target.addEventListener !== "undefined"){ 274 target.addEventListener(mode, func, false); 275 } 276 else if(typeof target.attachEvent !== "undefined"){ 277 target.attachEvent('on' + mode, function(){func.call(target , window.event)}); 278 } 279 else{ 280 console.log(target); 281 console.log("[warning] "+target); 282 } 283 }; 284 285 window.$$CALENDAR = $$CALENDAR; 286 new $$; 287})();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/13 10:16

> 製作中のカレンダーアプリで、あるページを開いたときにカレンダーの開いた日にちに目印を残す機能を実装したい。 そうですか、頑張ってくださいね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問