<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>サンプル アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<atom:link href="https://nyanblog2222.com/tag/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/feed/" rel="self" type="application/rss+xml" />
	<link>https://nyanblog2222.com/tag/サンプル/</link>
	<description>ちょっとしたことを調べているよ</description>
	<lastBuildDate>Fri, 15 Nov 2024 08:55:34 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://nyanblog2222.com/wp-content/uploads/2021/09/cropped-favicon-32x32.png</url>
	<title>サンプル アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<link>https://nyanblog2222.com/tag/サンプル/</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>【初心者】JavaScriptでTODOリスト作り方【サンプル】</title>
		<link>https://nyanblog2222.com/programming/5090/</link>
					<comments>https://nyanblog2222.com/programming/5090/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Thu, 09 Mar 2023 15:31:35 +0000</pubDate>
				<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web制作]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TODOリスト]]></category>
		<category><![CDATA[サンプル]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=5090</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308.jpg 800w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308-300x157.jpg 300w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308-768x401.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" />JavaScriptでTODOリストを作成しました。 シンプルでサンプル・解説ありなので、初心者のJavaScriptの勉強用に良かったら作成してみてください♪ 目次 はじめに実装内容（フロー）HTMLCSSJavaSc [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/5090/">【初心者】JavaScriptでTODOリスト作り方【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308.jpg 800w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308-300x157.jpg 300w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308-768x401.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" />
<p>JavaScriptでTODOリストを作成しました。</p>



<p>シンプルでサンプル・解説ありなので、初心者のJavaScriptの勉強用に良かったら作成してみてください♪</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">実装内容（フロー）</a></li><li><a href="#toc3" tabindex="0">HTML</a></li><li><a href="#toc4" tabindex="0">CSS</a></li><li><a href="#toc5" tabindex="0">JavaScript</a><ol><li><a href="#toc6" tabindex="0">コード</a></li><li><a href="#toc7" tabindex="0">解説</a><ol><li><a href="#toc8" tabindex="0">・グローバル変数の定義・ページ読み込み後、変数にHTML要素を設定</a></li><li><a href="#toc9" tabindex="0">・タスク追加</a><ol><li><a href="#toc10" tabindex="0">・完了ボタンクリック</a></li><li><a href="#toc11" tabindex="0">・削除ボタンクリック</a></li></ol></li><li><a href="#toc12" tabindex="0">・チェックしたタスクを一括削除：deleteTask()</a></li><li><a href="#toc13" tabindex="0">・タスク内にあるボタンを作成：createTaskButton(class_name, name)</a></li></ol></li></ol></li><li><a href="#toc14" tabindex="0">デモ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>まずはTODOリストの機能を考えます。<br>今回は以下の機能を持たせて実装しました。</p>



<p>簡単な機能しか実装していませんが、好みに応じてカスタマイズしてみてください。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-border-color has-brown-border-color">
<ul class="wp-block-list">
<li>タスクを追加、完了、削除</li>



<li>タスクをまとめて削除する</li>
</ul>
</div>



<p>作成のイメージ図がこちらです。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308.png" alt="" class="wp-image-5101" width="687" height="470" srcset="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308.png 687w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308-300x205.png 300w" sizes="(max-width: 687px) 100vw, 687px" /></figure>



<h2 class="wp-block-heading"><span id="toc2">実装内容（フロー）</span></h2>



<p>次に箇条書きで処理フローを記述します。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-border-color has-brown-border-color">
<ol class="wp-block-list">
<li>変数を設定</li>



<li>タスク追加ボタン押下時：
<ol class="wp-block-list">
<li>タスク名の入力値チェック</li>



<li>タスクに必要な要素を追加する</li>
</ol>
</li>



<li>チェックしたタスクを一括削除ボタン押下時：
<ol class="wp-block-list">
<li>チェックしたタスクをを削除する</li>
</ol>
</li>



<li>完了ボタン押下時： 
<ol class="wp-block-list">
<li>ボタンを押下したタスクを完了</li>
</ol>
</li>



<li>削除ボタン押下時： 
<ol class="wp-block-list">
<li>ボタンを押下したタスクを削除</li>
</ol>
</li>
</ol>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p>シンプルな機能だけ持たせています。<br>改善点は色々思い当たりますが、完了状態→タスク未完了状態に戻したりがありますね。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc3">HTML</span></h2>



<p>まずはHTMLを作成していきます。<br>作成しているのは、大きく以下の3つです。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-border-color has-brown-border-color">
<ol class="wp-block-list">
<li>タイトル（TODOリスト）</li>



<li>タスク名登録・タスク複数削除</li>



<li>タスク一覧（完了・削除ボタン）</li>
</ol>
</div>



<pre class="wp-block-code html"><code>&lt;body&gt;
  &lt;div class="wrapper"&gt;
    &lt;h1 id="header"&gt;TODOリスト&lt;/h1&gt;
    &lt;div id="input-wrap"&gt;
      &lt;input id="task-name" type="text" placeholder="タスク名を入力してください" /&gt;
      &lt;button onclick="addTask()"&gt;タスクを追加&lt;/button&gt;
      &lt;button class="deleteTask-button" onclick="deleteTask()"&gt;チェックしたタスクを削除&lt;/button&gt;
    &lt;/div&gt;
    &lt;div id="main-wrap"&gt;
      &lt;form name="task_form"&gt;
        &lt;ul id="todo-list"&gt;&lt;/ul&gt;
      &lt;/form&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;</code></pre>



<p>「タスクを追加」ボタンにクリックイベント&#8221;<span class="marker-under">addTask()</span>&#8220;<br>「チェックしたタスクを削除」ボタンにクリックイベント&#8221;<span class="marker-under">deleteTask()</span>&#8220;</p>



<p>を設定しています。</p>



<h2 class="wp-block-heading"><span id="toc4">CSS</span></h2>



<p>次にCSSでスタイルを決定します。<br>この辺りは好きなようにカスタマイズをしていただいて良いと思います！<br>※ 先にreset.cssを読み込んでからスタイルを設定していますので、注意してください。</p>



<p>特に記載するところはありませんが、<br>61行目「line-through」、87行目「disabled」はJavaScriptで「完了」ボタン押下時のイベントで使用するため、設定してください。</p>



<pre class="wp-block-code css"><code>@charset "utf-8";

/*全体*/
.wrapper{
  max-width: 600px;
  margin: 0 auto;
  color: #666;
}
#header {
  text-align: center;
  font-size: 24px;
  width: 100%;
  margin: 1.5rem 0;
}
#main-wrap {
  margin-bottom: 1.5rem;
}

/* 入力 */
#input-wrap {
  margin: 0 auto;
  width: 80%;
}
#input-wrap input{
  width: 40%;
  height: 24px;
  margin-right: 1rem;
}

/* リスト */
#main-wrap {
  text-align: center;
  margin: 0 auto;
  width: 70%;
  min-height: 120px;
  border: 1px solid #aaa;
  border-radius: 4px;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  padding: 0.8rem 2rem;
}

#main-wrap ul {
  padding-inline-start: 0
}

#main-wrap li {
  text-align: left;
  list-style-type: none;
  border-bottom: 1px dashed #aaa;
  padding: 0.8rem 0;
  display: flex;
  line-height: 32px;
}

#main-wrap p {
  width: 60%;
}
#main-wrap p.line-through {
  text-decoration: line-through;
}

/*ボタン*/
button{
  height: 32px;

  cursor: pointer;
  background: #B78D4A;
  color: #fff;
  border: 1px solid #B78D4A;
  border-radius: 4px;
  font-size: 1rem;
  padding: 0.2rem 1.5rem;
  margin-bottom: 0.5rem;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
}

button:hover{
  background-color: #D4BB92;
  border-color: #D4BB92;
}
button.disabled {
  background-color: #D4BB92;
  border-color: #D4BB92;
  cursor: not-allowed;
  pointer-events: none;
}

button.deleteTask-button {
  margin-bottom: 1.5rem;
}

.end-button, .delete-button {
  margin-bottom: 0;
  padding: 0.2rem 1rem;
}

.end-button {
  margin-right: 0.4rem;
}

</code></pre>



<h2 class="wp-block-heading"><span id="toc5">JavaScript</span></h2>



<p>JavaScriptのコードと解説をしていきます。</p>



<h3 class="wp-block-heading"><span id="toc6">コード</span></h3>



<p>次項で詳しく解説していますが、コメントでも多少記述しています。<br>コピペも可能です！</p>



<pre class="wp-block-code javascript"><code>var todoList;
window.onload = function () {
  todoList = document.getElementById('todo-list');
}

// タスク追加
function addTask() {
  var taskName = document.getElementById('task-name');

  // タスク名の入力がなければ処理を終了
  if(taskName.value.Trim() == "") return;

  // liに要素を追加
  var li = document.createElement('li');

  // liにinputを追加
  var input = document.createElement('input');
  input.setAttribute('type', 'checkbox');
  input.setAttribute('name', 'task');
  li.appendChild(input);

  // liにpを追加
  var p = document.createElement('p');
  p.innerHTML = taskName.value;
  li.appendChild(p);

  // liにbuttonを追加
  var endButton = createTaskButton('end-button', '完了');
  li.appendChild(endButton);

  // liにbuttonを追加
  var deleteButton = createTaskButton('delete-button', '削除');
  li.appendChild(deleteButton);

  // ulにliを追加
  todoList.appendChild(li);

  taskName.value = "";

  // イベント処理
  // 完了ボタンクリック
  endButton.addEventListener('click', function(e){
    e.preventDefault();
    this.setAttribute('class', 'end-button disabled');
    this.previousElementSibling.setAttribute('class', 'line-through');
  });
  // 削除ボタンクリック
  deleteButton.addEventListener('click', function(e){
    e.preventDefault();
    todoList.removeChild(this.closest('li'));
  });
}

// チェックしたタスクを一括削除
function deleteTask() {
  var inputList = document.task_form.task;
  for(var i=inputList.length-1;i&gt;=0;i--) {
    if(inputList&#91;i].checked){
      todoList.removeChild(inputList&#91;i].closest('li'));
    }
  }
}

// タスク内にあるボタンを作成
function createTaskButton(className, name) {
  var btn = document.createElement('button');
  btn.setAttribute('class', className);
  btn.innerHTML = name;
  return btn;
}</code></pre>



<h3 class="wp-block-heading"><span id="toc7">解説</span></h3>



<p>先述したコードに対して細かく解説していきます！</p>



<h4 class="wp-block-heading"><span id="toc8">・グローバル変数の定義・ページ読み込み後、変数にHTML要素を設定</span></h4>



<pre class="wp-block-code javascript"><code>var todoList;
window.onload = function () {
  todoList = document.getElementById('todo-list');
}</code></pre>



<p>ページ読み込み後に<span class="marker-under">&lt;ul&gt;のid&#8217;todo-list&#8217;を取得し、変数todoListに設定</span>しています。</p>



<h4 class="wp-block-heading"><span id="toc9">・タスク追加</span></h4>



<pre class="wp-block-code javascript"><code>function addTask() {
  var taskName = document.getElementById('task-name');

  // タスク名の入力がなければ処理を終了
  if(taskName.value.Trim() == "") return;

  // liに要素を追加
  var li = document.createElement('li');

  // liにinputを追加
  var input = document.createElement('input');
  input.setAttribute('type', 'checkbox');
  input.setAttribute('name', 'task');
  li.appendChild(input);

  // liにpを追加
  var p = document.createElement('p');
  p.innerHTML = taskName.value;
  li.appendChild(p);

  // liにbuttonを追加
  var endButton = createTaskButton('end-button', '完了');
  li.appendChild(endButton);

  // liにbuttonを追加
  var deleteButton = createTaskButton('delete-button', '削除');
  li.appendChild(deleteButton);

  // ulにliを追加
  todoList.appendChild(li);

  taskName.value = "";

  // イベント処理
  // のちほど説明のため省略
}</code></pre>



<p>「タスクを追加」ボタン押下時のイベントを実装します。</p>



<pre class="wp-block-code javascript"><code>var taskName = document.getElementById('task-name');</code></pre>



<p>タスク名を入力する<span class="marker-under">&lt;input&gt;のid&#8217;task-name&#8217;を取得し、変数taskNameに設定</span>しています。</p>



<pre class="wp-block-code javascript"><code>// タスク名の入力がなければ処理を終了
if(taskName.value.Trim() == "") return;
</code></pre>



<p>タスク名の入力値が空であれば処理を終了する。<br><span class="marker-under">Trim()は入力値の前後の空白を除きます</span>。</p>



<pre class="wp-block-code javascript"><code>// liに要素を追加
var li = document.createElement('li');

// liにinputを追加
var input = document.createElement('input');
input.setAttribute('type', 'checkbox');
input.setAttribute('name', 'task');
li.appendChild(input);

// liにpを追加
var p = document.createElement('p');
p.innerHTML = taskName.value;
li.appendChild(p);

// liにbuttonを追加
var endButton = createTaskButton('end-button', '完了');
li.appendChild(endButton);

// liにbuttonを追加
var deleteButton = createTaskButton('delete-button', '削除');
li.appendChild(deleteButton);
</code></pre>



<p>&lt;li&gt;の要素を作成します。&lt;li&gt;の中には以下の要素を作ります。</p>



<p>・チェックボックス<br>・タスク名<br>・完了ボタン<br>・削除ボタン</p>



<pre class="wp-block-code javascript"><code>// ulにliを追加
todoList.appendChild(li);
</code></pre>



<p>作成した&lt;li&gt;を&lt;ul&gt;に追加します。</p>



<pre class="wp-block-code javascript"><code>taskName.value = "";</code></pre>



<p>入力欄をリセットするため、空文字（&#8221;&#8221;）を設定します。</p>



<h5 class="wp-block-heading"><span id="toc10">・完了ボタンクリック</span></h5>



<figure class="wp-block-image size-full"><img decoding="async" width="692" height="437" src="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_2.png" alt="" class="wp-image-5131" srcset="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_2.png 692w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_2-300x189.png 300w" sizes="(max-width: 692px) 100vw, 692px" /></figure>



<pre class="wp-block-code javascript"><code>endButton.addEventListener('click', function(e){
  e.preventDefault();
  this.setAttribute('class', 'end-button disabled');
  this.previousElementSibling.setAttribute('class', 'line-through');
});</code></pre>



<p>各タスクの「完了」ボタンを実装します。</p>



<pre class="wp-block-code javascript"><code>e.preventDefault();</code></pre>



<p>こちらの関数はイベントのデフォルト動作をキャンセルします。</p>



<pre class="wp-block-code javascript"><code>this.setAttribute('class', 'end-button disabled');</code></pre>



<p>end_button[完了ボタン]にclass属性&#8217;end-button <span class="marker-under">disabled</span>&#8216;を設定します。<br>disabledクラスはボタンを非活性するスタイルを設定します。</p>



<p><span class="marker-under">thisはendButton</span>を指します。</p>



<pre class="wp-block-code javascript"><code>this.previousElementSibling.setAttribute('class', 'line-through');</code></pre>



<p>タスク名&lt;p&gt;に取消線のクラス<span class="marker-under">&#8216;line-through&#8217;</span>を設定します。</p>



<p><span class="marker-under">previousElementSibling</span><span class="marker-under">：</span><span class="marker-under">一つ前の要素</span>。endButton[完了ボタン]の一つ前の要素&lt;p&gt;を指します。</p>



<h5 class="wp-block-heading"><span id="toc11">・削除ボタンクリック</span></h5>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="690" height="456" src="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_4.png" alt="" class="wp-image-5149" srcset="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_4.png 690w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_4-300x198.png 300w" sizes="auto, (max-width: 690px) 100vw, 690px" /></figure>



<pre class="wp-block-code javascript"><code>deleteButton.addEventListener('click', function(e){
  e.preventDefault();
  todoList.removeChild(this.closest('li'));
});</code></pre>



<p>各タスクの「削除」ボタンを実装します。<br>※ e.preventDefault();は先ほど出てきたので省略</p>



<pre class="wp-block-code javascript"><code>todo_list.removeChild(this.closest('li'));</code></pre>



<p>タスクを削除します。</p>



<p><span class="marker-under">removeChild()</span>：&lt;ul&gt;（todoList）の子要素を削除します。<br><span class="marker-under">this.closest(&#8216;li&#8217;)</span>：クリックしたボタンthis(deleteButton)の直近に存在する親要素、もしくは要素自身を返します。</p>



<h4 class="wp-block-heading"><span id="toc12">・チェックしたタスクを一括削除：deleteTask()</span></h4>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="434" src="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_3-1024x434.png" alt="" class="wp-image-5140" srcset="https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_3-1024x434.png 1024w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_3-300x127.png 300w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_3-768x326.png 768w, https://nyanblog2222.com/wp-content/uploads/2023/03/20230308_3.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<pre class="wp-block-code javascript"><code>function deleteTask() {
  var inputList = document.task_form.task;
  for(var i=inputList.length-1;i&gt;=0;i--) {
    if(inputList&#91;i].checked){
      todoList.removeChild(inputList&#91;i].closest('li'));
    }
  }
}</code></pre>



<p><span class="marker-under">「チェックしたタスクを削除」ボタン押下時に呼ばれる関数</span>&#8220;deleteTask()&#8221;を作成します。<br>チェックしたタスクを一度に削除する処理を行います。</p>



<pre class="wp-block-code javascript"><code>var inputList = document.task_form.task;</code></pre>



<p>&lt;form name=&#8221;task_form&#8221;&gt;の中の&lt;input name=&#8221;task&#8221;&gt;を一覧で取得して変数inputListに設定しています。</p>



<p>&#8220;task_form&#8221;と&#8221;task&#8221;はname属性で指定した値です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p>htmlファイルと見比べながら確認すると分かりやすいです。</p>
</div></div>



<pre class="wp-block-code javascript"><code>// ①
for(var i=inputList.length-1;i&gt;=0;i--) {
  // ②
  if(inputList&#91;i].checked){
    // ③
    todo_list.removeChild(inputList&#91;i].closest('li'));
  }
}</code></pre>



<p>チェックしたタスク&lt;li&gt;を削除していきます。</p>



<p>①for文でinputListを後ろから一つずつ&lt;input&gt;を回し<br>②if文でチェックボックスでチェックしているか確認<br>※ チェックされているときはcheckedがtrue<br>③trueであればリスト（todoList）からliを削除<br>※ removeChildは「削除ボタンクリック」で開設済み</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p><span class="marker-under">①で後ろからfor文を回している理由</span>は、回しながらliを削除しているので<br>添字が変わってしまうことにより、チェックしているタスクが全て削除されなくなるというのを防いでいます。<br>※ ★このあたりは文章だと分かりずらいので、今後時間があれば図にするかもしれません…。</p>
</div></div>



<h4 class="wp-block-heading"><span id="toc13">・タスク内にあるボタンを作成：createTaskButton(class_name, name)</span></h4>



<pre class="wp-block-code javascript"><code>function createTaskButton(className, name) {
  var btn = document.createElement('button');
  btn.setAttribute('class', className);
  btn.innerHTML = name;
  return btn;
}</code></pre>



<p><span class="marker-under">タスクの「完了」「削除」ボタンを作成する関数</span>です。</p>



<pre class="wp-block-code javascript"><code>var btn = document.createElement('button');</code></pre>



<p>&lt;botton&gt;の要素を作成します。</p>



<pre class="wp-block-code javascript"><code>btn.setAttribute('class', className);
btn.innerHTML = name;</code></pre>



<p>ボタンに属性classを設定、innerHTMLにボタンに表示する内容を設定します。</p>



<p>最後にボタン（要素）を返します。</p>



<h2 class="wp-block-heading"><span id="toc14">デモ</span></h2>



<p><a href="https://nyanblog2222.com/demo/todolist1/" target="_blank">こちらがデモページ</a>になります。</p>



<p>良かったら試してみてください♪</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/5090/">【初心者】JavaScriptでTODOリスト作り方【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/5090/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【サンプル】JavaScriptのコードまとめリンク集</title>
		<link>https://nyanblog2222.com/programming/4717/</link>
					<comments>https://nyanblog2222.com/programming/4717/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Thu, 01 Sep 2022 12:18:37 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[サンプル]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=4717</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/85.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/85.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />本記事では当ブログで上げているJavaScript記事のまとめリンク集になります。 目次でカテゴリ分けをしているので、気になる内容がありましたら目次から飛んでみてください♪ 目次 文法JavaScript サンプルVue [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/4717/">【サンプル】JavaScriptのコードまとめリンク集</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/85.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/85.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>本記事では当ブログで上げてい<span class="marker-under">るJavaScript記事のまとめリンク集</span>になります。</p>



<p>目次でカテゴリ分けをしているので、気になる内容がありましたら目次から飛んでみてください♪</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">文法</a></li><li><a href="#toc2" tabindex="0">JavaScript サンプル</a></li><li><a href="#toc3" tabindex="0">Vue.js サンプル</a></li><li><a href="#toc4" tabindex="0">Canvas</a></li><li><a href="#toc5" tabindex="0">JSON</a></li><li><a href="#toc6" tabindex="0">アニメーション サンプル</a></li><li><a href="#toc7" tabindex="0">IE対応</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">文法</span></h2>



<p>基本的な文法やJavaScriptで用意されている関数などの解説の記事です。</p>



<ul class="wp-block-list"><li><a href="https://nyanblog2222.com/programming/javascript/1378/" target="_blank">【var let const】変数、型の違い</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1132/" target="_blank">＜input type=”file”＞で読み込んだ画像を表示</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1102/" target="_blank">＜input type=”file”＞ファイルを選択するボタンの画像やスタイルを設定する方法</a></li><li><a href="https://nyanblog2222.com/programming/javascript/775/" target="_blank">【console.log】デバッグ中に値を確認</a></li><li><a href="https://nyanblog2222.com/programming/javascript/822/" target="_blank">【フォーマット文字列】console.logでデバッグ</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1627/" target="_blank">【then/resolve/reject】Promiseの使い方</a></li><li><a href="https://nyanblog2222.com/programming/javascript/984/" target="_blank">非同期処理と処理の順番について</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1620/" target="_blank">遅延実行でイベントを発生させる方法</a></li></ul>



<h2 class="wp-block-heading"><span id="toc2">JavaScript サンプル</span></h2>



<p>JavaScriptを使用したサンプルの一覧です。</p>



<ul class="wp-block-list"><li><a href="https://nyanblog2222.com/programming/javascript/2749/" target="_blank">カレンダー作成</a></li><li><a href="https://nyanblog2222.com/programming/javascript/4496/" target="_blank">電卓の作り方</a></li><li><a href="https://nyanblog2222.com/programming/javascript/4764/" target="_blank">おみくじの作り方</a></li><li><a href="https://nyanblog2222.com/programming/javascript/2835/" target="_blank">祝日対応のカレンダー作成</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1194/" target="_blank">ビンゴマシンの作り方</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1016/" target="_blank">ビンゴカードの作り方</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1200/" target="_blank">カウントダウンタイマーの作り方</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1382/" target="_blank">アナログ時計の作り方</a></li><li><a href="https://nyanblog2222.com/programming/javascript/4829/" target="_blank">ストップウォッチの作り方</a></li></ul>



<h2 class="wp-block-heading"><span id="toc3">Vue.js サンプル</span></h2>



<p>Vueの基本からVueを使用したサンプルの一覧です。</p>



<ul class="wp-block-list"><li><a href="https://nyanblog2222.com/programming/javascript/4571/" target="_blank">vue.jsで電卓の作り方</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1638/" target="_blank">Vue.jsの基本（1）</a></li></ul>



<h2 class="wp-block-heading"><span id="toc4">Canvas</span></h2>



<p>2Dの図形を描画するのに用いられるcanvasの使い方の一覧です。</p>



<ul class="wp-block-list"><li><a href="https://nyanblog2222.com/programming/javascript/699/" target="_blank">Canvasとは</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1506/" target="_blank">Canvasで複数の画像を1つのimgタグで順番に出力</a></li></ul>



<h2 class="wp-block-heading"><span id="toc5">JSON</span></h2>



<p>さまざまなデータの集まりであるJSONの扱い方の一覧です。</p>



<ul class="wp-block-list"><li><a href="https://nyanblog2222.com/programming/javascript/1566/" target="_blank">【ajax/getJSON】JQueryでのJSON読み込み方法</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1526/" target="_blank">JSONデータの参照・追加（更新）・削除</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1514/" target="_blank">JSONとは？JS相互変換について(stringify/parse)</a></li><li><a href="https://nyanblog2222.com/programming/javascript/4739/" target="_blank">JavaScriptのオブジェクトからJSONデータに変換</a></li><li><a href="https://nyanblog2222.com/programming/javascript/4723/" target="_blank">JSONデータをJavaScriptのオブジェクトに変換</a></li></ul>



<h2 class="wp-block-heading"><span id="toc6">アニメーション サンプル</span></h2>



<p>JavaScriptでCSSやプラグインを操作した、動きのあるサンプルの一覧です。</p>



<ul class="wp-block-list"><li><a href="https://nyanblog2222.com/programming/javascript/1630/" target="_blank">スクロール中にヘッダーを固定する方法</a></li><li><a href="https://nyanblog2222.com/programming/javascript/1233/" target="_blank">文字をカーブ状に配置するプラグイン</a></li><li><a href="https://nyanblog2222.com/programming/javascript/32/" target="_blank">コピペでできるドロップダウンメニュー</a></li><li><a href="https://nyanblog2222.com/programming/javascript/73/" target="_blank">スムーススクロールでふわっとページ移動</a></li><li><a href="https://nyanblog2222.com/programming/javascript/345/" target="_blank">水面の動きを表現したプラグインの使い方</a></li></ul>



<h2 class="wp-block-heading"><span id="toc7">IE対応</span></h2>



<p>IE対応の一覧です。<br>※ 使うことはないかもしれませんが…。</p>



<ul class="wp-block-list"><li><a href="https://nyanblog2222.com/programming/javascript/965/" target="_blank">【object-fit-images】object-fit,object-positionのIE対応</a></li></ul>



<p></p>



<p></p>



<p></p>
<p>投稿 <a href="https://nyanblog2222.com/programming/4717/">【サンプル】JavaScriptのコードまとめリンク集</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/4717/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【初心者】簡単！vue.jsで電卓の作り方【サンプル】</title>
		<link>https://nyanblog2222.com/programming/javascript/4571/</link>
					<comments>https://nyanblog2222.com/programming/javascript/4571/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Thu, 10 Mar 2022 12:40:12 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[vue.js]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[初心者向け]]></category>
		<category><![CDATA[計算機]]></category>
		<category><![CDATA[電卓]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=4571</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/61.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/61.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />前回はJavaScriptで電卓を作成しました。今回は前回作成した電卓を元にvue.jsに書き換えしてみましょう。 前回の記事はこちらから！ 目次 はじめに電卓の機能HTMLvue.jsの設定 → CDNでの設定電卓の各 [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/javascript/4571/">【初心者】簡単！vue.jsで電卓の作り方【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/61.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/61.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>前回はJavaScriptで電卓を作成しました。<br>今回は前回作成した電卓を元にvue.jsに書き換えしてみましょう。</p>



<p>前回の記事はこちらから！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-related">

<a href="https://nyanblog2222.com/programming/javascript/4496/" title="【初心者】簡単！JavaScriptで電卓の作り方【サンプル】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/61-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/61-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【初心者】簡単！JavaScriptで電卓の作り方【サンプル】</div><div class="blogcard-snippet internal-blogcard-snippet">JSで四則演算や小数点の計算ができる簡易的な電卓を作成。持たせる機能から作り方の考え方までHTML,CSSソースやデモページ付きで解説しているので、プログラミングの勉強や参考に！デモページあり。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2022.03.06</div></div></div></div></a>
</div>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-popular">

<a href="https://nyanblog2222.com/programming/javascript/2749/" title="【初心者向け】JavaScriptでカレンダー作成【サンプル】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/67-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/67-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【初心者向け】JavaScriptでカレンダー作成【サンプル】</div><div class="blogcard-snippet internal-blogcard-snippet">JavaScript（JS）でカレンダーをライブラリなしで作り方を紹介。前月、次月を含めた1週間表示や日付の値を取得する方法をHTML,CSSソースやデモページ付きで解説！プログラミング初心者の方へ勉強や参考に！</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.01.07</div></div></div></div></a>
</div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a><ol><li><a href="#toc2" tabindex="0">電卓の機能</a></li></ol></li><li><a href="#toc3" tabindex="0">HTML</a><ol><li><a href="#toc4" tabindex="0">vue.jsの設定 → CDNでの設定</a></li><li><a href="#toc5" tabindex="0">電卓の各ボタンをv-forで自動作成</a></li><li><a href="#toc6" tabindex="0">クリックイベント書き換え</a></li><li><a href="#toc7" tabindex="0">vue使用のためv-model、idの設定</a></li></ol></li><li><a href="#toc8" tabindex="0">JavaScript</a></li><li><a href="#toc9" tabindex="0">デモ</a></li><li><a href="#toc10" tabindex="0">最後に</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>まずはじめに<a href="https://nyanblog2222.com/programming/javascript/4496/" target="_blank">前回でも</a>説明しましたが、電卓の機能を説明します。<br>その後、vue.jsに書き換える手順を説明します。</p>



<p>また、CSSに関しては前回の記事より変更がありませんので今回は割愛させていただきます。</p>



<h3 class="wp-block-heading"><span id="toc2">電卓の機能</span></h3>



<p>作る電卓の機能は次のとおりです。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-border-color has-brown-border-color">
<ul class="wp-block-list"><li>四則演算ができる</li><li>Cキーで初期化</li><li>＝で計算した後<br>数字の場合、初期化したあと数字入力<br>演算子の場合、結果はそのまま使用</li><li>最初のキーが”0”、&#8221;.&#8221;、&#8221;+-×/&#8221;の場合、<br>あらかじめ0が入力されている前提で式に入力</li></ul>
</div>



<p>完成イメージはこちらです。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="450" height="450" src="https://nyanblog2222.com/wp-content/uploads/2022/03/20220304.png" alt="" class="wp-image-4515" srcset="https://nyanblog2222.com/wp-content/uploads/2022/03/20220304.png 450w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304-300x300.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304-150x150.png 150w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304-100x100.png 100w" sizes="auto, (max-width: 450px) 100vw, 450px" /></figure>



<h2 class="wp-block-heading"><span id="toc3">HTML</span></h2>



<p>HTMLコードです。</p>



<pre class="wp-block-code html"><code>&lt;head>
  &lt;meta charset="UTF-8">
  &lt;title>電卓&lt;/title>
  &lt;link rel="icon" href="https://nyanblog2222.com/wp-content/themes/blogtemplate/images/favicon.ico">
  &lt;link rel="stylesheet" href="reset.css">
  &lt;link rel="stylesheet" href="style.css">
  &lt;script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js">&lt;/script>
  &lt;script src="script.js">&lt;/script>
&lt;/head>

&lt;body>
  &lt;div id="app">
    &lt;h1 id="header">電卓&lt;/h1>
    &lt;div id="calc">
      &lt;div>
        &lt;input readonly v-model="result" type="text">&lt;button v-on:click="c_click">C&lt;/button>
      &lt;/div>
      &lt;div v-for="row in dataArrays">
        &lt;button v-for="column in row" v-on:click="btn_Click(column)">{{column}}&lt;/button>
      &lt;/div>
    &lt;/div>
  &lt;/div>
&lt;/body></code></pre>



<h3 class="wp-block-heading"><span id="toc4">vue.jsの設定 → CDNでの設定</span></h3>



<pre class="wp-block-code html"><code>&lt;head>
  &lt;meta charset="UTF-8">
  &lt;title>電卓&lt;/title>
  &lt;link rel="stylesheet" href="reset.css">
  &lt;link rel="stylesheet" href="style.css">
  &lt;script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js">&lt;/script>
  &lt;script src="script.js">&lt;/script>
&lt;/head></code></pre>



<p>今回vueを使用するため、6行目にheadタグにCDN設定を追加しました。</p>



<p>注意する点として、<span class="marker-under">他のJavaScriptファイルを読み込む前にCDN設定するように</span>してください。</p>



<p>また、<a rel="noopener" href="https://jp.vuejs.org/v2/guide/installation.html" target="_blank">vue.jsのインストールや最新環境のCDNの情報はこちらから確認してください♪</a></p>



<h3 class="wp-block-heading"><span id="toc5">電卓の各ボタンをv-forで自動作成</span></h3>



<pre class="wp-block-code html"><code>&lt;div v-for="row in dataArrays">
  &lt;button v-for="column in row" v-on:click="btn_Click(column)">{{column}}&lt;/button>
&lt;/div></code></pre>



<pre class="wp-block-code javascript"><code>// 電卓のボタン
dataArrays: &#91;
  &#91;"7", "8", "9", "÷"],
  &#91;"4", "5", "6", "×"],
  &#91;"1", "2", "3", "-"],
  &#91;"0", ".", "=", "+"],
],</code></pre>



<p>Cボタン以外は<span class="marker-under">vueで自動生成</span>させます。<br>ボタンの順番やデータはJavaScript側で記述します。</p>



<p><span class="marker-under">divタグはデータ1行単位でforを回し、buttonタグは1項目（1データ）単位で回して</span>います。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p>dataArrayと完成イメージ図を見比べると分かりやすいと思います！</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc6">クリックイベント書き換え</span></h3>



<p>クリックイベント「onclick」を「v-on:click」に置換します。</p>



<h3 class="wp-block-heading"><span id="toc7">vue使用のためv-model、idの設定</span></h3>



<p>inputタグのidを設定していましたが、v-modelでの設定に変更。<br>divのid=&#8221;app&#8221;を設定。</p>



<h2 class="wp-block-heading"><span id="toc8">JavaScript</span></h2>



<p>こちらがJavaScriptのコードです。</p>



<p>scriptファイルを分けているので、<span class="marker-under">「window.onload」でhtmlの読み込みが終わってから実行する</span>ようにしています。</p>



<pre class="wp-block-code javascript"><code>window.onload = function () {
  new Vue({
    el: '#app',
    data: {
      result: "0",
      is_calc: false,
      dataArrays: &#91;
        &#91;"7", "8", "9", "÷"],
        &#91;"4", "5", "6", "×"],
        &#91;"1", "2", "3", "-"],
        &#91;"0", ".", "=", "+"],
      ],
      operators_list: &#91;"÷", "×", "-", "+"  ],
    },
    methods: {
      c_click: function () {
        this.result = "0";
        this.is_calc = false;
      },
      btn_Click: function (val) {
        if (this.operators_list.includes(val)) {
          this.ope_click(val);
        } else if (val === "=") {
          this.equal_click();
        } else {
          this.num_click(val);
        }
      },
      num_click: function (val) {
        if (this.is_calc) this.result = "0";
        this.is_calc = false;

        if (this.result == "0" &amp;&amp; val == "0") {
          this.result = "0";
        } else if (this.result == "0" &amp;&amp; val == ".") {
          this.result = "0.";
        } else if (this.result == "0") {
          this.result = val;
        } else {
          this.result += val;
        }
      },
      ope_click: function (val) {
        if (this.is_calc) this.is_calc = false;

        if (this.is_ope_last()) {
          this.result = this.result.slice(0, -1) + val;
        } else {
          this.result += val;
        }
      },
      equal_click: function () {
        if (this.is_ope_last()) this.result = this.result.slice(0, -1);

        var temp = new Function("return " + this.result.replaceAll("×", "*").replaceAll("÷", "/"))();
        if (temp == Infinity || Number.isNaN(temp)) {
          this.result = "Error";
        } else {
          this.result = temp;
          this.is_calc = true;
        }
      },
      is_ope_last: function () {
        return this.operators_list.includes(this.result.toString().slice(-1));
      },
    },
  });
};</code></pre>



<h2 class="wp-block-heading"><span id="toc9">デモ</span></h2>



<p><a href="https://nyanblog2222.com/demo/calc_vue1/">こちらがデモページ</a>になります。<br>電卓が表示され、ボタンを押すと実際に計算ができるのでぜひ試してみてください♪</p>



<h2 class="wp-block-heading"><span id="toc10">最後に</span></h2>



<p>いかがでしたでしょうか。vue.jsも主流になっていますので使いこなしていきたいですね！</p>



<p>良ければ別のサンプルページも見てみてくださいね♪</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a href="https://nyanblog2222.com/programming/javascript/2749/" title="【初心者向け】JavaScriptでカレンダー作成【サンプル】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/67-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/67-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【初心者向け】JavaScriptでカレンダー作成【サンプル】</div><div class="blogcard-snippet internal-blogcard-snippet">JavaScript（JS）でカレンダーをライブラリなしで作り方を紹介。前月、次月を含めた1週間表示や日付の値を取得する方法をHTML,CSSソースやデモページ付きで解説！プログラミング初心者の方へ勉強や参考に！</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.01.07</div></div></div></div></a>
</div>
<p>投稿 <a href="https://nyanblog2222.com/programming/javascript/4571/">【初心者】簡単！vue.jsで電卓の作り方【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/javascript/4571/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【初心者】簡単！JavaScriptで電卓の作り方【サンプル】</title>
		<link>https://nyanblog2222.com/programming/4496/</link>
					<comments>https://nyanblog2222.com/programming/4496/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Sun, 06 Mar 2022 14:50:45 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[初心者向け]]></category>
		<category><![CDATA[計算機]]></category>
		<category><![CDATA[電卓]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=4496</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/61.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/61.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />今回はJavaScriptで電卓を作成しました。初心者の方が勉強しやすいシンプルな機能で作ってみました。 まずは簡単なものを完成することを目的にして、そのあとで機能を追加していくことが勉強するにはおすすめですよ♪ 別記事 [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/4496/">【初心者】簡単！JavaScriptで電卓の作り方【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/61.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/61.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>今回はJavaScriptで電卓を作成しました。<br>初心者の方が勉強しやすいシンプルな機能で作ってみました。</p>



<p>まずは<span class="marker-under">簡単なものを完成することを目的</span>にして、<br>そのあとで<span class="marker-under">機能を追加していくことが勉強する</span>にはおすすめですよ♪</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p>初めから難しいものを作ろうとしても時間がかかって、その内やる気がなくなるのは勿体ないですよね…。（よくある）</p>
</div></div>



<p>別記事でVue.jsを使った記述も紹介しますので、合わせて読んでみてください！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a href="https://nyanblog2222.com/programming/javascript/4571/" title="【初心者】簡単！vue.jsで電卓の作り方【サンプル】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/61-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/61-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【初心者】簡単！vue.jsで電卓の作り方【サンプル】</div><div class="blogcard-snippet internal-blogcard-snippet">JS[JavaScript]で四則演算ができる簡易的な計算機を作成しました。プログラミング初心者の方への勉強向け記事になりますのでデモページを見ながらコード、関数を見ながら作成してみてはいかがでしょうか。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2022.03.10</div></div></div></div></a>
</div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">HTML</a><ol><li><a href="#toc3" tabindex="0">コード</a></li><li><a href="#toc4" tabindex="0">HTML解説</a></li></ol></li><li><a href="#toc5" tabindex="0">CSS</a></li><li><a href="#toc6" tabindex="0">JavaScript</a><ol><li><a href="#toc7" tabindex="0">コード</a></li><li><a href="#toc8" tabindex="0">解説</a><ol><li><a href="#toc9" tabindex="0">・グローバル変数の定義</a></li><li><a href="#toc10" tabindex="0">・HTML読み込み後</a></li><li><a href="#toc11" tabindex="0">・Cボタンクリック</a></li><li><a href="#toc12" tabindex="0">・数字ボタンクリック</a></li><li><a href="#toc13" tabindex="0">・演算子ボタンクリック</a></li><li><a href="#toc14" tabindex="0">・＝ボタンクリック</a></li><li><a href="#toc15" tabindex="0">・is_ope_last() 関数</a></li></ol></li></ol></li><li><a href="#toc16" tabindex="0">デモ</a></li><li><a href="#toc17" tabindex="0">最後に</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>まずは<span class="marker-under">今回作成する電卓の機能を決定</span>します。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p>コーディングする前に機能を決定しておくことは、手戻りを防ぐためにも大事ですね♪</p>
</div></div>



<p>今回は次の機能を持たせました。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-border-color has-brown-border-color">
<ul class="wp-block-list">
<li>四則演算ができる</li>



<li>Cキーで初期化</li>



<li>＝で計算した後<br>数字の場合、初期化したあと数字入力<br>演算子の場合、結果はそのまま使用</li>



<li>最初のキーが”0”、&#8221;.&#8221;、&#8221;+-×/&#8221;の場合、<br>あらかじめ0が入力されている前提で式に入力</li>
</ul>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p>今回はこのまま進みますが、機会があればアップデートしていきたいですね♪</p>
</div></div>



<p>完成イメージ図はこちらです。<a href="https://nyanblog2222.com/demo/calc1/">デモページ</a>もありますので見てみてください。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="450" height="450" src="https://nyanblog2222.com/wp-content/uploads/2022/03/20220304.png" alt="" class="wp-image-4515" srcset="https://nyanblog2222.com/wp-content/uploads/2022/03/20220304.png 450w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304-300x300.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304-150x150.png 150w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304-100x100.png 100w" sizes="auto, (max-width: 450px) 100vw, 450px" /></figure>



<h2 class="wp-block-heading"><span id="toc2">HTML</span></h2>



<p>まずはHTMLを作成していきます。<br>作成しているのは、次の3つです。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-border-color has-brown-border-color">
<ul class="wp-block-list">
<li>ヘッダー<br>「電卓」の文字</li>



<li>計算の表示枠</li>



<li>数字や演算子 ボタン</li>
</ul>
</div>



<h3 class="wp-block-heading"><span id="toc3">コード</span></h3>



<pre class="wp-block-code html"><code>&lt;div class="wrapper"&gt;
  &lt;h1 id="header"&gt;電卓&lt;/h1&gt;
  &lt;div id="calc"&gt;
    &lt;div&gt;
      &lt;input readonly id="result" type="text" value="0"&gt;
      &lt;button onclick="c_click()"&gt;C&lt;/button&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;7&lt;/button&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;8&lt;/button&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;9&lt;/button&gt;
      &lt;button onclick="ope_click(this.innerHTML)"&gt;÷&lt;/button&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;4&lt;/button&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;5&lt;/button&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;6&lt;/button&gt;
      &lt;button onclick="ope_click(this.innerHTML)"&gt;×&lt;/button&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;1&lt;/button&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;2&lt;/button&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;3&lt;/button&gt;
      &lt;button onclick="ope_click(this.innerHTML)"&gt;-&lt;/button&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;0&lt;/button&gt;
      &lt;button onclick="num_click(this.innerHTML)"&gt;.&lt;/button&gt;
      &lt;button onclick="equal_click()"&gt;=&lt;/button&gt;
      &lt;button onclick="ope_click(this.innerHTML)"&gt;+&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p><span class="marker-under">input後のbuttonや、button後のbutton</span>について<br>分かりやすいように改行を入れていますが、<span class="marker-under">実際のコードでは改行していない</span>ので注意してください。</p>
</div></div>



<p>HTMLファイルを見てみると画像のように表示されます。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="450" height="450" src="https://nyanblog2222.com/wp-content/uploads/2022/03/20220304_2.png" alt="" class="wp-image-4522" srcset="https://nyanblog2222.com/wp-content/uploads/2022/03/20220304_2.png 450w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304_2-300x300.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304_2-150x150.png 150w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304_2-100x100.png 100w" sizes="auto, (max-width: 450px) 100vw, 450px" /></figure>



<h3 class="wp-block-heading"><span id="toc4">HTML解説</span></h3>



<ul class="wp-block-list">
<li>5行目　input要素<br>・readonly属性にして直接入力不可<br>・計算式や結果を表示するためid=&#8221;result&#8221;を設定<br>・valueを0にして初期表示</li>



<li>6行目　Cボタン<br>onclick属性で&#8221;c_click()&#8221;を設定</li>



<li>数字ボタン<br>onclick属性で&#8221;num_click(this.innerHTML)&#8221;を設定<br>this.innerHTMLはHTMLの中身を表しています。<br>例）9行目であれば&#8221;7&#8243;が入ります。</li>



<li>演算子ボタン<br>onclick属性で&#8221;ope_click(this.innerHTML)&#8221;を設定</li>



<li>29行目　イコールボタン<br>onclick属性で&#8221;equal_click()&#8221;を設定</li>
</ul>



<h2 class="wp-block-heading" id="block-9c55e8b0-4699-44c9-8292-f6eb513518f3"><span id="toc5">CSS</span></h2>



<p id="block-5cb743a1-2754-4c53-9351-04a5a1df0cb0">次にCSSでスタイルを決定します。<br>”reset.css”も使っているので、この辺りは好きなようにカスタマイズをしてください。</p>



<pre class="wp-block-code css"><code>@charset "utf-8";
/*全体*/
.wrapper{
  max-width: 350px;
  margin: 0 auto;
  color: #666;
}
#header,#calc{
  box-sizing: border-box;
  text-align: center;
}
/*ヘッダー*/
#header {
  font-size: 24px;
  padding: 1rem;
}
/*テキスト*/
input{
  box-sizing: border-box;
  width: 75%;
  height: 3.5rem;
  font-size: 1.6rem;
  text-align: right;
  padding: 0 0.75rem;
}
/*ボタン関係*/
button{
  font-size: 18px;
  width: 25%;
  height: 3.5rem;
  color: #333;
  vertical-align: middle;
  border-color: #fff;
}
button:hover{
  background-color: #ddd;
}
</code></pre>



<p>設定が終わると、このように表示されるようになります。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="450" height="450" src="https://nyanblog2222.com/wp-content/uploads/2022/03/20220304.png" alt="" class="wp-image-4515" srcset="https://nyanblog2222.com/wp-content/uploads/2022/03/20220304.png 450w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304-300x300.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304-150x150.png 150w, https://nyanblog2222.com/wp-content/uploads/2022/03/20220304-100x100.png 100w" sizes="auto, (max-width: 450px) 100vw, 450px" /></figure>



<h2 class="wp-block-heading"><span id="toc6">JavaScript</span></h2>



<h3 class="wp-block-heading"><span id="toc7">コード</span></h3>



<p>次項で詳しく解説していますが、コメントでも多少記述しています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2021/07/2645602.png" alt="みみねこ" class="speech-icon-image"/></figure><div class="speech-name">みみねこ</div></div><div class="speech-balloon">
<p>最初はコピペして自分で理解しながらカスタマイズする方法も勉強するのに向いていますよ！</p>
</div></div>



<pre class="wp-block-code javascript"><code>// データ
var result = "";
// =で計算したかどうか
var is_calc = false;

// 初期表示
window.onload = function () {
  result = document.getElementById('result');
};

// Cキー押下
function c_click(){
  result.value = "0";
  is_calc = false;
}

// 数字キー押下
function num_click(val){
  if(is_calc)  result.value = "0";
  is_calc = false;  

  if(result.value =="0" &amp;&amp; val == "0"){
    result.value = "0";
  }else if(result.value == "0" &amp;&amp; val == "."){
    result.value = "0.";
  }else if(result.value == "0"){
    result.value = val;
  }else{
    result.value += val;
  }
}

// 演算子キー押下
function ope_click(val){
  if(is_calc)  is_calc = false;
  
  if(is_ope_last()){
    result.value = result.value.slice(0, -1) + val;
  } else {
    result.value += val;
  }
}

// =キークリック
function equal_click(){
  if(is_ope_last())  result.value = result.value.slice(0, -1);

  var temp = new Function("return " + result.value.replaceAll("×", "*").replaceAll("÷", "/"))();
  if(temp == Infinity || Number.isNaN(temp)){
    result.value = "Error";
  }else{
    result.value = temp;
    is_calc = true;
  }
}

// 入力されている値が演算子かどうか
function is_ope_last(){
  return &#91;"+","-","×","÷"].includes(result.value.toString().slice(-1));
}
</code></pre>



<h3 class="wp-block-heading"><span id="toc8">解説</span></h3>



<p>先述したコードに対して細かく解説していきます！</p>



<h4 class="wp-block-heading"><span id="toc9">・グローバル変数の定義</span></h4>



<p>2つの変数を定義、初期化しています。<br>result変数はhtmlの<span class="marker-under">id=&#8221;ressult&#8221;</span>と紐づけします。</p>



<pre class="wp-block-code javascript"><code>// 表示させるデータ
var data = "";
// =で計算したかどうか
var is_calc = false;</code></pre>



<h4 class="wp-block-heading"><span id="toc10">・HTML読み込み後</span></h4>



<p>HTML読み込み後、<span class="marker-under">id&#8221;result&#8221;と変数のresultを紐づけ</span>しています。</p>



<pre class="wp-block-code javascript"><code>window.onload = function () {
  result = document.getElementById('result');
};</code></pre>



<h4 class="wp-block-heading"><span id="toc11">・Cボタンクリック</span></h4>



<p>Cボタンクリック時のイベントを記述しています。<br>ここでは変数の初期化を行っています。</p>



<pre class="wp-block-code javascript"><code>function c_click(){
  result.value = "0";
  is_calc = false;
}</code></pre>



<h4 class="wp-block-heading"><span id="toc12">・数字ボタンクリック</span></h4>



<p>数字ボタンクリック時のイベントを記述しています。</p>



<pre class="wp-block-code javascript"><code>function num_click(val){
  if(is_calc)  result.value = "0";
  is_calc = false;  

  if(result.value =="0" &amp;&amp; val == "0"){
    result.value = "0";
  }else if(result.value == "0" &amp;&amp; val == "."){
    result.value = "0.";
  }else if(result.value == "0"){
    result.value = val;
  }else{
    result.value += val;
  }
}</code></pre>



<ul class="wp-block-list">
<li>2、3行目<br>1度&#8221;＝&#8221;で計算済みの場合、数字ボタンを押したら<span class="marker-under">resultを初期化</span>します。<br><span class="bold">is_calcはfalse</span>にします。</li>



<li>5～13行目<br>入力した数字によって<span class="marker-under">resultの処理</span>を行います。<br>・1つ目の条件は初期化後、&#8221;0&#8243;が入力された場合、resultに&#8221;0&#8243;を設定<br>・2つ目の条件は初期化後、&#8221;.&#8221;が入力された場合、resultに&#8221;0.&#8221;を設定<br>・3つ目の条件は初期化後、上記以外の数字が入力された場合、resultに入力値を設定<br>・それ以外は直接resultに入力値を追加</li>
</ul>



<h4 class="wp-block-heading"><span id="toc13">・演算子ボタンクリック</span></h4>



<p>演算子ボタンクリック時のイベントを記述しています。</p>



<pre class="wp-block-code javascript"><code>function ope_click(val){
  if(is_calc)  is_calc = false;
  
  if(is_ope_last()){
    result.value = result.value.slice(0, -1) + val;
  } else {
    result.value += val;
  }
}</code></pre>



<ul class="wp-block-list">
<li>2行目<br><span class="marker-under">is_calcがtrueの場合があるのでfalse</span>にします</li>



<li>4～8行目<br>条件によって計算式の処理を変えています。<br>1つ目の条件では、<span class="marker-under">直前のボタンが演算子の場合、演算子を切り替え</span>ます。<br>それ以外では、<span class="marker-under">計算式に入力した演算子を付け加え</span>ます。</li>
</ul>



<pre class="wp-block-code javascript"><code>// 1つ目の条件：例
// 直前の計算式
9×6+
// 押したボタン
-
// 演算子切り替え後
9×6-</code></pre>



<h4 class="wp-block-heading"><span id="toc14">・＝ボタンクリック</span></h4>



<p>＝ボタンクリック時のイベントを記述しています。</p>



<pre class="wp-block-code javascript"><code>function equal_click(){
  if(is_ope_last())  result.value = result.value.slice(0, -1);

  var temp = new Function("return " + result.value.replaceAll("×", "*").replaceAll("÷", "/"))();

  if(temp == Infinity || Number.isNaN(temp)){
    result.value = "Error";
  }else{
    result.value = temp;
    is_calc = true;
  }
}</code></pre>



<ul class="wp-block-list">
<li>2行目<br>計算式の最後が演算子の場合、<span class="marker-under">演算子を取り除き</span>ます。</li>



<li>4行目<br><span class="marker-under">変数tempに計算式の計算結果を設定</span>します。</li>



<li>7～9行目<br>計算結果がInfinity（無限大）かNaN（数字出ない）場合、<span class="marker-under">resultにErrorを設定</span>します。</li>



<li>8～11行目<br><span class="marker-under">tempの値をresultに設定し、計算済み（is_calc）フラグをtrue</span>にします。</li>
</ul>



<h4 class="wp-block-heading"><span id="toc15">・is_ope_last() 関数</span></h4>



<p><span class="bold-red">計算式の最後が演算子か判定する</span>関数です。<br>「result.value.toString().slice(-1)」は計算式の最後の文字を取得し、<br>「[&#8220;+&#8221;,&#8221;-&#8220;,&#8221;×&#8221;,&#8221;÷&#8221;].includes(&#8230;」で<span class="marker-under">4つの演算子と一致するかどうかbool型で返して</span>います。</p>



<pre class="wp-block-code javascript"><code>function is_ope_last(){
  return &#91;"+","-","×","÷"].includes(result.value.toString().slice(-1));
}
</code></pre>



<h2 class="wp-block-heading"><span id="toc16">デモ</span></h2>



<p><a href="https://nyanblog2222.com/demo/calc1/">こちらがデモページ</a>になります。<br>電卓が表示され、ボタンを押すと実際に計算ができるのでぜひ試してみてください♪</p>



<h2 class="wp-block-heading"><span id="toc17">最後に</span></h2>



<p>いかがでしたでしょうか。<br>次回はvue.jsに書き換えしてみます！</p>



<p>良ければ別のサンプルページも見てみてくださいね♪</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a href="https://nyanblog2222.com/programming/javascript/4571/" title="【初心者】簡単！vue.jsで電卓の作り方【サンプル】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/61-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/61-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/61-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【初心者】簡単！vue.jsで電卓の作り方【サンプル】</div><div class="blogcard-snippet internal-blogcard-snippet">JS[JavaScript]で四則演算ができる簡易的な計算機を作成しました。プログラミング初心者の方への勉強向け記事になりますのでデモページを見ながらコード、関数を見ながら作成してみてはいかがでしょうか。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2022.03.10</div></div></div></div></a>
</div>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a href="https://nyanblog2222.com/programming/javascript/4717/" title="【サンプル】JavaScriptのコードまとめリンク集" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/85-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/85-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【サンプル】JavaScriptのコードまとめリンク集</div><div class="blogcard-snippet internal-blogcard-snippet">本記事では当ブログで上げているJavaScript記事のまとめリンク集になります。目次でカテゴリ分けをしているので、気になる内容がありましたら目次から飛んでみてください♪</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2022.09.01</div></div></div></div></a>
</div>
<p>投稿 <a href="https://nyanblog2222.com/programming/4496/">【初心者】簡単！JavaScriptで電卓の作り方【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/4496/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【WordPress】サイトにデモページを貼りたい！【作り方】</title>
		<link>https://nyanblog2222.com/webproduction/wordpress/1157/</link>
					<comments>https://nyanblog2222.com/webproduction/wordpress/1157/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Wed, 11 Aug 2021 23:32:33 +0000</pubDate>
				<category><![CDATA[Web制作]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[デモページ]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=1157</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/12.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/12.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/12-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/12-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/12-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />プログラミング言語やWordPressやら、動きを確認するデモページを別ページで表示させているサイトありますよね！ 今回デモページを作成するにあたり、方法を調べたので大きく3つの手順でご紹介します♪ 目次 デモページの用 [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/webproduction/wordpress/1157/">【WordPress】サイトにデモページを貼りたい！【作り方】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/12.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/12.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/12-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/12-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/12-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>プログラミング言語やWordPressやら、動きを確認する<span class="marker-under-red">デモページ</span>を<br>別ページで表示させているサイトありますよね！</p>



<p>今回デモページを作成するにあたり、方法を調べたので大きく3つの手順でご紹介します♪</p>



<div class="wp-block-sbd-checkpoint-block is-style-sbd-checkpoint-pink"><p class="sbd-checkpoint-title">デモページの作成手順</p><div class="sbd-checkpoint-content sbd-inner-block-init"><p>１．デモページを作成</p><p>２．作成したフォルダごと「ドメイン」直下、もしくは「ドメイン/wordpress」直下にあげる</p><p>３．記事にリンクを張り付ける</div></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">デモページの用意</a><ol><li><a href="#toc2" tabindex="0">デモページのサンプル</a><ol><li><a href="#toc3" tabindex="0">index.html</a></li><li><a href="#toc4" tabindex="0">style.css</a></li><li><a href="#toc5" tabindex="0">script.js</a></li></ol></li></ol></li><li><a href="#toc6" tabindex="0">サーバにファイルをアップする</a><ol><li><a href="#toc7" tabindex="0">デモを配置する親フォルダを作成</a></li><li><a href="#toc8" tabindex="0">親フォルダにデモファイル一式をアップロードする</a></li></ol></li><li><a href="#toc9" tabindex="0">デモページの表示</a><ol><li><a href="#toc10" tabindex="0">デモページのリンクの貼り方</a></li><li><a href="#toc11" tabindex="0">デモページの確認</a></li></ol></li><li><a href="#toc12" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">デモページの用意</span></h2>



<p>まずはデモページを準備します。</p>



<p>フォルダを用意し、その中にデモページのファイルを準備します。</p>



<p>demo1フォルダに<br>　js/script.js<br>　css/style.css<br>　index.html<br>を準備してみてください。</p>



<p>試しなのでindex.htmlだけでも大丈夫です。</p>



<p>分かりやすく、画像にしてみました！</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="404" height="406" src="https://nyanblog2222.com/wp-content/uploads/2020/06/dir-min.png" alt="デモページのファイル構成" class="wp-image-1170" srcset="https://nyanblog2222.com/wp-content/uploads/2020/06/dir-min.png 404w, https://nyanblog2222.com/wp-content/uploads/2020/06/dir-min-300x300.png 300w, https://nyanblog2222.com/wp-content/uploads/2020/06/dir-min-150x150.png 150w, https://nyanblog2222.com/wp-content/uploads/2020/06/dir-min-120x120.png 120w" sizes="auto, (max-width: 404px) 100vw, 404px" /></figure>



<h3 class="wp-block-heading"><span id="toc2">デモページのサンプル</span></h3>



<p>試しにやってみたいという方は<br>こちらのコードをコピーして使用してください。</p>



<h4 class="wp-block-heading"><span id="toc3">index.html</span></h4>



<pre class="wp-block-code html"><code>&lt;!DOCTYPE html&gt;
&lt;html lang="ja"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;デモサンプル&lt;/title&gt;
    &lt;meta name="viewport" content="width=device-wisth,initial-scale=1"&gt;
    &lt;meta name="format-detection" content="telephone=no"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=Edge"&gt;
    &lt;!--&#91;if lt IE 9]&gt;
&lt;script type="text/javascript" src="https://html5shiv.googlecode.com/svn/trunk/html5.js"&gt;&lt;/script&gt;
&lt;!&#91;endif]--&gt;
    &lt;link rel="stylesheet" href="css/style.css"&gt;
    &lt;script src="js/script.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div&gt;
        &lt;p&gt;デモサンプルです。&lt;/p&gt;
        &lt;p&gt;表示させてみましょう！&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>



<h4 class="wp-block-heading"><span id="toc4">style.css</span></h4>



<pre class="wp-block-code css"><code>@charset "utf-8";
p {
    // テキストを中央配置
    text-align: center;
}</code></pre>



<h4 class="wp-block-heading"><span id="toc5">script.js</span></h4>



<pre class="wp-block-code javascript"><code>window.onload = function() {
    // コンソール画面に"hello world!!"を表示
    console.log("hello world!!")
}</code></pre>



<h2 class="wp-block-heading"><span id="toc6">サーバにファイルをアップする</span></h2>



<p>今回サーバへのファイルアップロードにはffftpのソフトを使用しています。</p>



<p>アップロードができれば、どのソフトを使用してもOKですし、<br>サーバ会社の管理画面よりファイルをアップしても問題ありません！</p>



<h3 class="wp-block-heading"><span id="toc7">デモを配置する親フォルダを作成</span></h3>



<p><span class="marker-under-red">デモを配置する親フォルダをWordPressがインストールされているフォルダ直下に作成</span>します。</p>



<p>画像で表示されているフォルダやファイルを参考に場所を見つけてください。</p>



<p>初期設定にもよりますが、<span class="marker-under-red">ドメイン直下</span>もしくは<span class="marker-under-red">WordPressフォルダ直下</span>にあることが多いです。</p>



<p>また、「wp-admin」「wp-content」「wp-includes」のフォルダや<br>「.htaccess」「index.php」のファイルがあるフォルダと考えると見つけやすいです。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="595" height="461" src="https://nyanblog2222.com/wp-content/uploads/2020/06/SnapCrab_nyanlsvjp-FFFTP_2020-6-4_23-44-24_No-00-min.png" alt="demoフォルダ作成" class="wp-image-1181" srcset="https://nyanblog2222.com/wp-content/uploads/2020/06/SnapCrab_nyanlsvjp-FFFTP_2020-6-4_23-44-24_No-00-min.png 595w, https://nyanblog2222.com/wp-content/uploads/2020/06/SnapCrab_nyanlsvjp-FFFTP_2020-6-4_23-44-24_No-00-min-300x232.png 300w" sizes="auto, (max-width: 595px) 100vw, 595px" /></figure>



<p>今回は<span class="marker-under-red">「demo」</span>というフォルダを作成しています。</p>



<h3 class="wp-block-heading"><span id="toc8">親フォルダにデモファイル一式をアップロードする</span></h3>



<p>続いて、先ほど作成した「demo」フォルダに「demo1」フォルダ毎アップロードします。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="595" height="459" src="https://nyanblog2222.com/wp-content/uploads/2020/06/SnapCrab_nyanlsvjp-FFFTP_2020-6-4_23-46-16_No-00-min.png" alt="demo1フォルダ作成" class="wp-image-1182" srcset="https://nyanblog2222.com/wp-content/uploads/2020/06/SnapCrab_nyanlsvjp-FFFTP_2020-6-4_23-46-16_No-00-min.png 595w, https://nyanblog2222.com/wp-content/uploads/2020/06/SnapCrab_nyanlsvjp-FFFTP_2020-6-4_23-46-16_No-00-min-300x231.png 300w" sizes="auto, (max-width: 595px) 100vw, 595px" /></figure>



<p>「demo」フォルダに複数のデモが格納されるイメージです。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="420" height="455" src="https://nyanblog2222.com/wp-content/uploads/2020/06/files-min.png" alt="デモの配置イメージ" class="wp-image-1183" srcset="https://nyanblog2222.com/wp-content/uploads/2020/06/files-min.png 420w, https://nyanblog2222.com/wp-content/uploads/2020/06/files-min-277x300.png 277w" sizes="auto, (max-width: 420px) 100vw, 420px" /></figure>



<h2 class="wp-block-heading"><span id="toc9">デモページの表示</span></h2>



<p>先ほどアップロードしたデモページをさっそく確認してみましょう。</p>



<h3 class="wp-block-heading"><span id="toc10">デモページのリンクの貼り方</span></h3>



<p>htmlに実際にリンクを貼ってみましょう。</p>



<p>「リンク」をクリックし、URLを設定します。</p>



<p>URLは<br>https://[ドメイン]/[デモの親フォルダ]/[デモのフォルダ]/<br>のように設定してください。<br>※ 例：https://nyanblog2222.com/demo/demo1/</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="605" height="227" src="https://nyanblog2222.com/wp-content/uploads/2020/06/fdbe18a67d1e55088baf3a0ff7f915eb.png" alt="デモページのリンクの設定" class="wp-image-1188" srcset="https://nyanblog2222.com/wp-content/uploads/2020/06/fdbe18a67d1e55088baf3a0ff7f915eb.png 605w, https://nyanblog2222.com/wp-content/uploads/2020/06/fdbe18a67d1e55088baf3a0ff7f915eb-300x113.png 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>



<h3 class="wp-block-heading"><span id="toc11">デモページの確認</span></h3>



<p>こちらのページから先ほど設定したデモページを確認することができます。</p>



<p><strong><a class="link" href="https://nyanblog2222.com/demo/demo1/" target="_blank">デモページ</a></strong></p>



<h2 class="wp-block-heading"><span id="toc12">まとめ</span></h2>



<p>いかがでしたでしょうか。</p>



<p>簡単に作ることができますが、<br>デモページのファイルをどこに置けばいいのか悩んだので今回は記事にしてみました。</p>



<p>一度親フォルダを作成しておけば<br>次からも同じように3つの手順でデモページを引き続き作成することができます。</p>



<div class="wp-block-sbd-checkpoint-block is-style-sbd-checkpoint-pink"><p class="sbd-checkpoint-title">デモページの作成手順</p><div class="sbd-checkpoint-content sbd-inner-block-init"><p>１．デモページを作成</p><p>２．作成したフォルダごと「ドメイン」直下、もしくは「ドメイン/wordpress」直下にあげる</p><p>３．記事にリンクを張り付ける</div></div>



<p>良かったら参考にしていただければ嬉しいです！</p>



<p>最後までご覧いただき、ありがとうございました♪</p>
<p>投稿 <a href="https://nyanblog2222.com/webproduction/wordpress/1157/">【WordPress】サイトにデモページを貼りたい！【作り方】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/webproduction/wordpress/1157/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【初心者向け】JavaScriptで祝日対応のカレンダー作成【サンプル】</title>
		<link>https://nyanblog2222.com/programming/javascript/2835/</link>
					<comments>https://nyanblog2222.com/programming/javascript/2835/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Sat, 09 Jan 2021 02:57:23 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[カレンダー]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[作成]]></category>
		<category><![CDATA[初心者向け]]></category>
		<category><![CDATA[演習]]></category>
		<category><![CDATA[祝日]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=2835</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/68.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/68.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />こんにちは！前回はJavaScriptでカレンダーを作成しました。今回は、前回作成したカレンダーに祝日対応を組み込んでいきたいと思います！ 前回の記事は下のリンクからどうぞ♪ 目次 はじめにフロー（箇条書き）CSVファイ [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/javascript/2835/">【初心者向け】JavaScriptで祝日対応のカレンダー作成【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/68.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/68.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>こんにちは！<br>前回はJavaScriptでカレンダーを作成しました。<br>今回は、前回作成したカレンダーに祝日対応を組み込んでいきたいと思います！</p>



<p>前回の記事は下のリンクからどうぞ♪</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-nyanblog wp-block-embed-nyanblog"><div class="wp-block-embed__wrapper">

<a href="https://nyanblog2222.com/programming/javascript/2749/" title="【初心者向け】JavaScriptでカレンダー作成【サンプル】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/67-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/67-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【初心者向け】JavaScriptでカレンダー作成【サンプル】</div><div class="blogcard-snippet internal-blogcard-snippet">JavaScript（JS）でカレンダーをライブラリなしで作り方を紹介。前月、次月を含めた1週間表示や日付の値を取得する方法をHTML,CSSソースやデモページ付きで解説！プログラミング初心者の方へ勉強や参考に！</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.01.07</div></div></div></div></a>
</div></figure>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">フロー（箇条書き）</a><ol><li><a href="#toc3" tabindex="0">CSVファイル読み込み</a></li><li><a href="#toc4" tabindex="0">当月の日付判定</a></li></ol></li><li><a href="#toc5" tabindex="0">HTML</a></li><li><a href="#toc6" tabindex="0">CSS</a></li><li><a href="#toc7" tabindex="0">JavaScript</a><ol><li><a href="#toc8" tabindex="0">コード</a></li><li><a href="#toc9" tabindex="0">解説</a><ol><li><a href="#toc10" tabindex="0">・祝日データ（CSVファイル）取得</a></li><li><a href="#toc11" tabindex="0">・当月の日付を設定　コード：70～77行目</a></li><li><a href="#toc12" tabindex="0">・日付チェック　checkDate関数</a></li><li><a href="#toc13" tabindex="0">・当日判定　isToday関数</a></li><li><a href="#toc14" tabindex="0">・祝日判定　isHoliday関数</a></li></ol></li></ol></li><li><a href="#toc15" tabindex="0">デモ</a></li><li><a href="#toc16" tabindex="0">最後に</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>祝日の対応ですが、今回はCSVファイルを読み込んで日付判定を行います。<br>CSVファイルは<a href="https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html">内閣府のWebサイト</a>から取得できます。<br>※ 文字コードをShift-JISからUTF-8に変更しました。</p>



<p>直接ダウンロードされる場合は<a href="https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv">ここをクリック</a>してください。</p>



<p>データは日付、祝日名の2項目で作成されています。</p>



<h2 class="wp-block-heading"><span id="toc2">フロー（箇条書き）</span></h2>



<p>箇条書きで処理フローを記述していきます。<br>CSVファイルの読み込みと当月の日付判定のそれぞれで変更を加えます。</p>



<h3 class="wp-block-heading"><span id="toc3">CSVファイル読み込み</span></h3>



<ol class="wp-block-list">
<li>CSVファイルを読み込み</li>



<li>読み込み完了後、カレンダー表示</li>
</ol>



<h3 class="wp-block-heading"><span id="toc4">当月の日付判定</span></h3>



<ol class="wp-block-list">
<li>その日付の情報を取得（本日か、祝日か等）</li>



<li>条件に応じてカレンダー（HTML）を設定</li>
</ol>



<h2 class="wp-block-heading"><span id="toc5">HTML</span></h2>



<pre class="wp-block-code html"><code>&lt;div class="wrapper"&gt;
    &lt;!-- xxxx年xx月を表示 --&gt;
    &lt;h1 id="header"&gt;&lt;/h1&gt;

    &lt;!-- ボタンクリックで月移動 --&gt;
    &lt;div id="next-prev-button"&gt;
        &lt;button id="prev" onclick="prev()"&gt;‹&lt;/button&gt;
        &lt;button id="next" onclick="next()"&gt;›&lt;/button&gt;
    &lt;/div&gt;

    &lt;!-- カレンダー --&gt;
    &lt;div id="calendar"&gt;&lt;/div&gt;
&lt;/div&gt;</code></pre>



<p>こちらの記事のHTMLと同じなので、解説は省略します♪</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-nyanblog wp-block-embed-nyanblog"><div class="wp-block-embed__wrapper">

<a href="https://nyanblog2222.com/programming/javascript/2749/" title="【初心者向け】JavaScriptでカレンダー作成【サンプル】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/67-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/67-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【初心者向け】JavaScriptでカレンダー作成【サンプル】</div><div class="blogcard-snippet internal-blogcard-snippet">JavaScript（JS）でカレンダーをライブラリなしで作り方を紹介。前月、次月を含めた1週間表示や日付の値を取得する方法をHTML,CSSソースやデモページ付きで解説！プログラミング初心者の方へ勉強や参考に！</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.01.07</div></div></div></div></a>
</div></figure>



<h2 class="wp-block-heading"><span id="toc6">CSS</span></h2>



<p><a href="https://nyanblog2222.com/programming/javascript/2749/" target="_blank">前回の記事</a>とほとんど変わりなしですが、<br><span class="marker-under-blue">祝日のクラス（=holiday）に日曜日と同様のcolorスタイルの設定</span>を追加しました。</p>



<pre class="wp-block-code"><code>td:first-child,
td.holiday{
    color: red;
}</code></pre>



<h2 class="wp-block-heading"><span id="toc7">JavaScript</span></h2>



<h3 class="wp-block-heading"><span id="toc8">コード</span></h3>



<p>全体のコードです。<br>次項で解説しますが、前回の投稿で解説した内容は割愛いたします。</p>



<pre class="wp-block-code"><code>const week = &#91;"日", "月", "火", "水", "木", "金", "土"];
const today = new Date();
// 月末だとずれる可能性があるため、1日固定で取得
var showDate = new Date(today.getFullYear(), today.getMonth(), 1);

// 祝日取得
var request;
window.onload = function () {
    request = new XMLHttpRequest();
    request.open('get', 'syukujitsu.csv', true);
    request.send(null);
    request.onload = function () {
        // 初期表示
        showProcess(today, calendar);
    };
};

// 前の月表示
function prev(){
    showDate.setMonth(showDate.getMonth() - 1);
    showProcess(showDate);
}

// 次の月表示
function next(){
    showDate.setMonth(showDate.getMonth() + 1);
    showProcess(showDate);
}

// カレンダー表示
function showProcess(date) {
    var year = date.getFullYear();
    var month = date.getMonth(); // 0始まり
    document.querySelector('#header').innerHTML = year + "年 " + (month + 1) + "月";

    var calendar = createProcess(year, month);
    document.querySelector('#calendar').innerHTML = calendar;
}

// カレンダー作成
function createProcess(year, month) {
    // 曜日
    var calendar = "&lt;table&gt;&lt;tr class='dayOfWeek'&gt;";
    for (var i = 0; i &lt; week.length; i++) {
        calendar += "&lt;th&gt;" + week&#91;i] + "&lt;/th&gt;";
    }
    calendar += "&lt;/tr&gt;";

    var count = 0;
    var startDayOfWeek = new Date(year, month, 1).getDay();
    var endDate = new Date(year, month + 1, 0).getDate();
    var lastMonthEndDate = new Date(year, month, 0).getDate();
    var row = Math.ceil((startDayOfWeek + endDate) / week.length);

    // 1行ずつ設定
    for (var i = 0; i &lt; row; i++) {
        calendar += "&lt;tr&gt;";
        // 1colum単位で設定
        for (var j = 0; j &lt; week.length; j++) {
            if (i == 0 &amp;&amp; j &lt; startDayOfWeek) {
                // 1行目で1日まで先月の日付を設定
                calendar += "&lt;td class='disabled'&gt;" + (lastMonthEndDate - startDayOfWeek + j + 1) + "&lt;/td&gt;";
            } else if (count &gt;= endDate) {
                // 最終行で最終日以降、翌月の日付を設定
                count++;
                calendar += "&lt;td class='disabled'&gt;" + (count - endDate) + "&lt;/td&gt;";
            } else {
                // 当月の日付を曜日に照らし合わせて設定
                count++;
                var dateInfo = checkDate(year, month, count);
                if(dateInfo.isToday){
                    calendar += "&lt;td class='today'&gt;" + count + "&lt;/td&gt;";
                } else if(dateInfo.isHoliday) {
                    calendar += "&lt;td class='holiday' title='" + dateInfo.holidayName + "'&gt;" + count + "&lt;/td&gt;";
                } else {
                    calendar += "&lt;td&gt;" + count + "&lt;/td&gt;";
                }
            }
        }
        calendar += "&lt;/tr&gt;";
    }
    return calendar;
}

// 日付チェック
function checkDate(year, month, day) {
    if(isToday(year, month, day)){
        return {
            isToday: true,
            isHoliday: false,
            holidayName: ""
        };
    }

    var checkHoliday = isHoliday(year, month, day);
    return {
        isToday: false,
        isHoliday: checkHoliday&#91;0],
        holidayName: checkHoliday&#91;1],
    };
}

// 当日かどうか
function isToday(year, month, day) {
    return (year == today.getFullYear()
        &amp;&amp; month == (today.getMonth())
        &amp;&amp; day == today.getDate());
    }

// 祝日かどうか
function isHoliday(year, month, day) {
    var checkDate = year + '/' + (month + 1) + '/' + day;
    var dateList = request.responseText.split('\n');
    // 1行目はヘッダーのため、初期値1で開始
    for (var i = 1; i &lt; dateList.length; i++) {
        if (dateList&#91;i].split(',')&#91;0] === checkDate) {
            return &#91;true, dateList&#91;i].split(',')&#91;1]];
        }
    }
    return &#91;false, ""];
}</code></pre>



<h3 class="wp-block-heading"><span id="toc9">解説</span></h3>



<h4 class="wp-block-heading"><span id="toc10">・祝日データ（CSVファイル）取得</span></h4>



<pre class="wp-block-code"><code><em>// 祝日取得</em>
<strong>var</strong> request;
window.onload = <strong>function</strong> () {
&nbsp; &nbsp; request = <strong>new</strong> XMLHttpRequest();
&nbsp; &nbsp; request.open('get', 'syukujitsu.csv', true);
&nbsp; &nbsp; request.send(null);
&nbsp; &nbsp; request.onload = <strong>function</strong> () {
&nbsp; &nbsp; &nbsp; <em>// 初期表示</em>
&nbsp; &nbsp; &nbsp; showProcess(today, calendar);
&nbsp; &nbsp; };
};</code></pre>



<p><span class="marker-under-blue">XMLHttpRequestオブジェクトを使用して、変数 request にCSVデータを格納</span>しています。<br>1. request.open()関数でデータ取込のリクエストを行います。<br>2. request.send()関数でリスエストをサーバに送信します。<br>3. 7～10行目はロードが成功して完了後に呼ばれます。</p>



<p>つまり、CSVファイルの読み込みが完了した後にカレンダー表示の関数（showProcess）を呼び出しています。</p>



<h4 class="wp-block-heading"><span id="toc11">・当月の日付を設定　コード：70～77行目</span></h4>



<pre class="wp-block-code"><code><strong>var</strong> dateInfo = checkDate(year, month, count);
<strong>if</strong>(dateInfo.isToday){
    calendar += "&lt;td class='today'&gt;" + count + "&lt;/td&gt;";
} <strong>else</strong> <strong>if</strong>(dateInfo.isHoliday) {
    calendar += "&lt;td class='holiday' title='" + dateInfo.holidayName + "'&gt;" + count + "&lt;/td&gt;";
} <strong>else</strong> {
    calendar += "&lt;td&gt;" + count + "&lt;/td&gt;";
}</code></pre>



<p>1行目：変数 dateInfoに日付チェックの戻り値を設定します。</p>



<p>2～8行目：dateInfoを使って条件に応じて日付を設定していきます。</p>



<p>・dateInfo.isTodayがtrueの場合、クラスtodayを付与して設定。<br>・<span class="marker-under-blue">dateInfo.isHolidayがtrueの場合、クラスholidayを付与、titleに祝日名を設定</span>。<br>・上記以外の場合、日付をそのまま設定。</p>



<p><span class="marker-under-blue">titleに祝日名を設定しているのは、祝日名をツールチップとして表示させるためです。</span><br>ツールチップ：カーソルやマウスポインタを合わせると小さな領域が注釈が表示されるもの。</p>



<h4 class="wp-block-heading"><span id="toc12">・日付チェック　checkDate関数</span></h4>



<p>引数：year（年）、month（月）、day（日）<br>戻り値：日付の情報<br>・当日かどうか（Bool）<br>・祝日かどうか（Bool）<br>・祝日名（文字列）</p>



<pre class="wp-block-code"><code><em>// 日付チェック</em>
<strong>function</strong> <strong>checkDate</strong>(year, month, day) {
    <strong>if</strong>(isToday(year, month, day)){
        <strong>return</strong> {
            isToday: true,
            isHoliday: false,
            holidayName: ""
        };
    }

    <strong>var</strong> checkHoliday = isHoliday(year, month, day);
    <strong>return</strong> {
        isToday: false,
        isHoliday: checkHoliday&#91;0],
        holidayName: checkHoliday&#91;1],
    };
}</code></pre>



<p>日付チェックの関数です。<br>条件に応じて戻り値のオブジェクトを作成しています。</p>



<h4 class="wp-block-heading"><span id="toc13">・当日判定　isToday関数</span></h4>



<p>引数：year（年）、month（月）、day（日）<br>戻り値：当日かどうか（Bool）</p>



<pre class="wp-block-code"><code><em>// 当日かどうか</em>
<strong>function</strong> <strong>isToday</strong>(year, month, day) {
    <strong>return</strong> (year == today.getFullYear()
    &amp;&amp; month == (today.getMonth())
    &amp;&amp; day == today.getDate());
}</code></pre>



<p>today（Date型）を使って、当日かどうかを判定します。</p>



<h4 class="wp-block-heading"><span id="toc14">・祝日判定　isHoliday関数</span></h4>



<p>引数：year（年）、month（月）、day（日）<br>戻り値：配列 [祝日かどうか（Bool）, 祝日名]</p>



<pre class="wp-block-code"><code><em>// 祝日かどうか</em>
<strong>function</strong> <strong>isHoliday</strong>(year, month, day) {
    <strong>var</strong> checkDate = year + '/' + (month + 1) + '/' + day;
    <strong>var</strong> dateList = request.responseText.split('\n');
    <em>// 1行目はヘッダーのため、初期値1で開始</em>
    <strong>for</strong> (<strong>var</strong> i = 1; i &lt; dateList.length; i++) {
        <strong>if</strong> (dateList&#91;i].split(',')&#91;0] === checkDate) {
            <strong>return</strong> &#91;true, dateList&#91;i].split(',')&#91;1]];
        }
    }
    <strong>return</strong> &#91;false, ""];
}</code></pre>



<p>3行目：CSVデータの日付はYYYY/MM/DD形式のため、<br>引数で渡された年月日をYYYY/MM/DD形式で変数checkDateに設定。</p>



<p>4行目：変数dataListには、CSVデータを行毎に配列に格納。</p>



<p>6～10行目：CSVの行数分for文を回します。<br>ファイルの1行目はヘッダー行のため、初期値=1で設定。</p>



<p>7～9行目：<br>祝日：dateList[i].split(‘,’)[0]<br>祝日名：dateList[i].split(‘,’)[1]</p>



<p><span class="marker-under-blue">祝日とcheckDateが一致する場合、戻り値を配列 [true, 祝日名]で設定して処理を完了。<br>どのデータとも一致しない場合は戻り値を配列 [false, 空文字]でセットして処理を完了。</span></p>



<h2 class="wp-block-heading"><span id="toc15">デモ</span></h2>



<p><a href="https://nyanblog2222.com/demo/calender2/">こちらがデモページ</a>になります。<br>祝日の日付が赤くなっており、該当の日付にカーソルを合わせると祝日の名前が表示されます。</p>



<p>ただ、<span class="marker-under-red">このCSVファイルはその年分までの日付しか入っていないため、<br>2024年以降の祝日には対応されていません。ご注意ください…。</span></p>



<h2 class="wp-block-heading"><span id="toc16">最後に</span></h2>



<p>いかがでしたでしょうか。<br>カレンダーを確認するときに祝日は分かっている方が見やすいですね♪</p>



<p>実装も簡単にできたのでお勧めです。</p>



<p>良ければ他の投稿もご覧ください！</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/javascript/2835/">【初心者向け】JavaScriptで祝日対応のカレンダー作成【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/javascript/2835/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【初心者向け】JavaScriptでカレンダー作成【サンプル】</title>
		<link>https://nyanblog2222.com/programming/javascript/2749/</link>
					<comments>https://nyanblog2222.com/programming/javascript/2749/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Thu, 07 Jan 2021 04:29:22 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[カレンダー]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[作成]]></category>
		<category><![CDATA[初心者向け]]></category>
		<category><![CDATA[演習]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=2749</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/67.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/67.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />こんにちは！今回はJavaScriptでカレンダーを作成してみました。カレンダー作成にはライブラリも存在しますが、勉学のために作成する方が多いかと思いますので今回は使用していません。自作すると、カスタマイズが容易であるこ [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/javascript/2749/">【初心者向け】JavaScriptでカレンダー作成【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/67.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/67.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/67-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>こんにちは！<br>今回はJavaScriptでカレンダーを作成してみました。<br>カレンダー作成にはライブラリも存在しますが、勉学のために作成する方が多いかと思いますので今回は使用していません。自作すると、カスタマイズが容易であることもメリットですね！</p>



<p>本記事の続きで<span class="marker-under-red">カレンダーに祝日も反映</span>させました！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-related">

<a href="https://nyanblog2222.com/javascript/2835/" title="【初心者向け】JavaScriptで祝日対応のカレンダー作成【サンプル】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/68-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/68-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【初心者向け】JavaScriptで祝日対応のカレンダー作成【サンプル】</div><div class="blogcard-snippet internal-blogcard-snippet">JavaScriptで祝日対応のカレンダーを作成しました。内容：内閣府のWebサイトから取得したCSVファイルを読み込んで日付判定を行い、祝日を赤字表示させツールチップに祝日名を表示する。var request = new XMLHttpRequest();...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.01.09</div></div></div></div></a>
</div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">フロー（箇条書き）</a></li><li><a href="#toc3" tabindex="0">HTML</a></li><li><a href="#toc4" tabindex="0">CSS</a></li><li><a href="#toc5" tabindex="0">JavaScript</a><ol><li><a href="#toc6" tabindex="0">コード</a></li><li><a href="#toc7" tabindex="0">解説</a><ol><li><a href="#toc8" tabindex="0">・グローバル変数の定義</a></li><li><a href="#toc9" tabindex="0">・初期表示</a></li><li><a href="#toc10" tabindex="0">・prev()、next()関数</a></li><li><a href="#toc11" tabindex="0">・カレンダー表示　showProcess関数</a></li><li><a href="#toc12" tabindex="0">・カレンダー作成　createProcess関数</a></li></ol></li></ol></li><li><a href="#toc13" tabindex="0">デモ</a></li><li><a href="#toc14" tabindex="0">最後に</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>まずは<span class="marker-under-red">カレンダーに持たせる機能を決定</span>します。<br>今回は以下の機能を持たせることにしました。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-border-color has-cyan-bluish-gray-border-color">
<ul class="wp-block-list">
<li>ヘッダーに年月を表示</li>



<li>ボタンで月の移動ができる</li>



<li>余白に先月、翌月の日付を灰色で表示</li>



<li>本日の日付に色をつける</li>
</ul>
</div>



<p>実際に作成したものですが、イメージ図はこちらです。</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="600" height="376" src="https://nyanblog2222.com/wp-content/uploads/2021/01/20210107_01.png" alt="カレンダー作成イメージ図" class="wp-image-2760" srcset="https://nyanblog2222.com/wp-content/uploads/2021/01/20210107_01.png 600w, https://nyanblog2222.com/wp-content/uploads/2021/01/20210107_01-300x188.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>



<p>また、次以降の投稿で祝日、スケジュール入力の機能を追加したいと考えています。</p>



<h2 class="wp-block-heading"><span id="toc2">フロー（箇条書き）</span></h2>



<p>次に箇条書きで処理フローを記述します。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-border-color has-cyan-bluish-gray-border-color">
<ol class="wp-block-list">
<li>日付オブジェクトを取得</li>



<li>年月を表示</li>



<li>カレンダーを作成
<ol class="wp-block-list">
<li>曜日の行を作成</li>



<li>1日が何曜日からはじまるか取得</li>



<li>当月が何行になるか算出</li>



<li>月曜日から2. で取得した行数分日付を設定</li>
</ol>
</li>



<li>カレンダーを表示</li>
</ol>
</div>



<p>こちらで実際にコーディングを進めていきます。</p>



<h2 class="wp-block-heading"><span id="toc3">HTML</span></h2>



<p>まずはHTMLを作成していきます。<br>作成しているのは、以下の3つです。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-border-color has-cyan-bluish-gray-border-color">
<ol class="wp-block-list">
<li>年月表示のヘッダー</li>



<li>月移動のボタン</li>



<li>カレンダー</li>
</ol>
</div>



<pre class="wp-block-code html"><code>&lt;div class="wrapper"&gt;
    &lt;!-- xxxx年xx月を表示 --&gt;
    &lt;h1 id="header"&gt;&lt;/h1&gt;

    &lt;!-- ボタンクリックで月移動 --&gt;
    &lt;div id="next-prev-button"&gt;
        &lt;button id="prev" onclick="prev()"&gt;‹&lt;/button&gt;
        &lt;button id="next" onclick="next()"&gt;›&lt;/button&gt;
    &lt;/div&gt;

    &lt;!-- カレンダー --&gt;
    &lt;div id="calendar"&gt;&lt;/div&gt;
&lt;/div&gt;</code></pre>



<h2 class="wp-block-heading"><span id="toc4">CSS</span></h2>



<p>次にCSSでスタイルを決定します。<br>この辺りは好きなようにカスタマイズをしていただいて良いと思います！</p>



<p>ただ、JavaScriptで以下にクラスを設定しているので、ご注意ください。</p>



<p><span class="marker-under-red"><span class="marker-under-red">先月、翌月の日付：disabled</span><br>当日：today</span></p>



<pre class="wp-block-code css"><code>@charset "utf-8";

/*全体*/
.wrapper{
    max-width: 600px;
    margin: 0 auto;
    color: #666;
}
#header {
    text-align: center;
    font-size: 24px;
    width: 100%;
    margin: 1rem 0 0;
}

/*カレンダー*/
#calendar {
    text-align: center;
    width: 100%;
}
table {
    outline: 2px solid #ddd;
    border-collapse: collapse;
    width: 100%;
}
th {
    color: #000;
}
th, td {
    outline: 1px solid #ddd;
    padding-top: 10px;
    padding-bottom: 10px;
    text-align: center;
}
/*日曜日*/
td:first-child {
    color: red;
}
/*土曜日*/
td:last-child {
    color: blue;
}
/*前後月の日付*/
td.disabled {
    color: #ccc;
}
/*本日*/
td.today {
    background-color: #D65E72;
    color: #fff;
}

/*ボタン*/
#next-prev-button {
    position: relative;
}
#next-prev-button button{
    cursor: pointer;
    background: #B78D4A;
    color: #fff;
    border: 1px solid #B78D4A;
    border-radius: 4px;
    font-size: 1rem;
    padding: 0.5rem 2rem;
    margin: 1rem 0;
}
#next-prev-button button:hover{
    background-color: #D4BB92;
    border-color: #D4BB92;
}
#prev {
    float: left;
}
#next {
    float: right;
}</code></pre>



<h2 class="wp-block-heading"><span id="toc5">JavaScript</span></h2>



<p>JavaScriptで実際にカレンダーを作成、表示していきます。</p>



<h3 class="wp-block-heading"><span id="toc6">コード</span></h3>



<p>次項で詳しく解説していますが、コメントでも多少記述しています。<br>コピペも可能です！</p>



<pre class="wp-block-code javascript"><code>const week = &#91;"日", "月", "火", "水", "木", "金", "土"];
const today = new Date();
// 月末だとずれる可能性があるため、1日固定で取得
var showDate = new Date(today.getFullYear(), today.getMonth(), 1);

// 初期表示
window.onload = function () {
    showProcess(today, calendar);
};
// 前の月表示
function prev(){
    showDate.setMonth(showDate.getMonth() - 1);
    showProcess(showDate);
}

// 次の月表示
function next(){
    showDate.setMonth(showDate.getMonth() + 1);
    showProcess(showDate);
}

// カレンダー表示
function showProcess(date) {
    var year = date.getFullYear();
    var month = date.getMonth();
    document.querySelector('#header').innerHTML = year + "年 " + (month + 1) + "月";

    var calendar = createProcess(year, month);
    document.querySelector('#calendar').innerHTML = calendar;
}

// カレンダー作成
function createProcess(year, month) {
    // 曜日
    var calendar = "&lt;table&gt;&lt;tr class='dayOfWeek'&gt;";
    for (var i = 0; i &lt; week.length; i++) {
        calendar += "&lt;th&gt;" + week&#91;i] + "&lt;/th&gt;";
    }
    calendar += "&lt;/tr&gt;";

    var count = 0;
    var startDayOfWeek = new Date(year, month, 1).getDay();
    var endDate = new Date(year, month + 1, 0).getDate();
    var lastMonthEndDate = new Date(year, month, 0).getDate();
    var row = Math.ceil((startDayOfWeek + endDate) / week.length);

    // 1行ずつ設定
    for (var i = 0; i &lt; row; i++) {
        calendar += "&lt;tr&gt;";
        // 1colum単位で設定
        for (var j = 0; j &lt; week.length; j++) {
            if (i == 0 &amp;&amp; j &lt; startDayOfWeek) {
                // 1行目で1日まで先月の日付を設定
                calendar += "&lt;td class='disabled'&gt;" + (lastMonthEndDate - startDayOfWeek + j + 1) + "&lt;/td&gt;";
            } else if (count &gt;= endDate) {
                // 最終行で最終日以降、翌月の日付を設定
                count++;
                calendar += "&lt;td class='disabled'&gt;" + (count - endDate) + "&lt;/td&gt;";
            } else {
                // 当月の日付を曜日に照らし合わせて設定
                count++;
                if(year == today.getFullYear()
                  &amp;&amp; month == (today.getMonth())
                  &amp;&amp; count == today.getDate()){
                    calendar += "&lt;td class='today'&gt;" + count + "&lt;/td&gt;";
                } else {
                    calendar += "&lt;td&gt;" + count + "&lt;/td&gt;";
                }
            }
        }
        calendar += "&lt;/tr&gt;";
    }
    return calendar;
}</code></pre>



<h3 class="wp-block-heading"><span id="toc7">解説</span></h3>



<p>先述したコードに対して細かく解説していきます！<br>結構長くなってしまったので、不要な方は飛ばしてください。</p>



<h4 class="wp-block-heading"><span id="toc8">・グローバル変数の定義</span></h4>



<pre class="wp-block-code javascript"><code>const week = &#91;"日", "月", "火", "水", "木", "金", "土"];</code></pre>



<p>曜日を格納した配列を定義しています。<br><span class="marker-under-blue">変更予定がないので、定数（const）で作成</span>しています。</p>



<pre class="wp-block-code javascript"><code>const today = new Date();
var showDate = new Date(today.getFullYear(), today.getMonth(), 1);</code></pre>



<p>・本日の日付オブジェクトを定数で宣言<br>・表示する日付オブジェクトを宣言</p>



<p>表示する日付オブジェクトは初期化では”today”の年月＋1日固定で作成します。</p>



<p><span class="marker-under">Q：なぜ”today”をそのまま使用しないか</span><br>A：前の月、次の月表示で”getMonth()”に+-1を行っていますが、末日だと先々月、もしくは翌々日になることがあります。</p>



<h4 class="wp-block-heading"><span id="toc9">・初期表示</span></h4>



<pre class="wp-block-code javascript"><code>window.onload = function () {
    showProcess(today, calendar);
};</code></pre>



<p>当日の日付オブジェクトを使用して、showProcess関数を呼び出して初期表示を行います。</p>



<pre class="wp-block-code javascript"><code>window.onload = function () {・・・};</code></pre>



<p>↑は<span class="marker-under-blue">HTMLが読み込まれた直後に呼び出される関数です。</span></p>



<h4 class="wp-block-heading"><span id="toc10">・prev()、next()関数</span></h4>



<pre class="wp-block-code javascript"><code>// 前の月表示
function prev(){
    showDate.setMonth(showDate.getMonth() - 1);
    showProcess(showDate);
}

// 次の月表示
function next(){
    showDate.setMonth(showDate.getMonth() + 1);
    showProcess(showDate);
}</code></pre>



<p>「＜」クリックでprev()、「＞」クリックでnext()の関数がそれぞれ呼び出されます。</p>



<p>prev()関数の場合はshowDateオブジェクトに1月分減算後、<br>next()関数の場合はshowDateオブジェクトに1月分加算後にshowProcess関数を呼び出してカレンダーを表示します。</p>



<h4 class="wp-block-heading"><span id="toc11">・カレンダー表示　showProcess関数</span></h4>



<p>引数：date（表示するDateオブジェクト）</p>



<pre class="wp-block-code javascript"><code>var year = date.getFullYear();
var month = date.getMonth();
document.querySelector('#header').innerHTML = year + "年 " + (month + 1) + "月";</code></pre>



<p>ヘッダー（id=&#8221;#header&#8221;）に年月を表示させます。<br>getMonth()は0始まりのため、1月の場合、0が取得されます。<br>そのため、3行目では (month + 1) で月を設定します。</p>



<pre class="wp-block-code"><code>var calendar = createProcess(year, month);
document.querySelector('#calendar').innerHTML = calendar;</code></pre>



<p>createProcess関数でカレンダーを作成し、id=&#8221;#calendar&#8221;にカレンダーを設定します。</p>



<h4 class="wp-block-heading"><span id="toc12">・カレンダー作成　createProcess関数</span></h4>



<p>引数：year（年）、month（月）<br>戻り値：作成したカレンダー</p>



<pre class="wp-block-code"><code>// 曜日
var calendar = "&lt;table&gt;&lt;tr class='dayOfWeek'&gt;";
for (var i = 0; i &lt; week.length; i++) {
    calendar += "&lt;th&gt;" + week&#91;i] + "&lt;/th&gt;";
}
calendar += "&lt;/tr&gt;";</code></pre>



<p>定数”week”を使用してカレンダー上部に表示させる、曜日を設定します。</p>



<pre class="wp-block-code"><code>var count = 0;
var startDayOfWeek = new Date(year, month, 1).getDay();
var endDate = new Date(year, month + 1, 0).getDate();
var lastMonthEndDate = new Date(year, month, 0).getDate();
var row = Math.ceil((startDayOfWeek + endDate) / week.length);</code></pre>



<p>日付を設定するのに必要な変数を定義します。<br>それぞれの変数は以下の内容を定義しています。</p>



<p>count：日付のカウント<br>startDayOfWeek：表示する月の1日の曜日<br>endDate：表示する月の末日<br>lastMonthEndDate：表示する先月の末日<br>row：カレンダー（日付部分）の行数</p>



<pre class="wp-block-code"><code>// 1行ずつ設定
for (var i = 0; i &lt; row; i++) {
    calendar += "&lt;tr&gt;";
    // 1colum単位で設定
    for (var j = 0; j &lt; week.length; j++) {
        if (i == 0 &amp;&amp; j &lt; startDayOfWeek) {
            // 1行目で1日まで先月の日付を設定
            calendar += "&lt;td class='disabled'&gt;"
                     + (lastMonthEndDate - startDayOfWeek + j + 1) + "&lt;/td&gt;";
        } else if (count &gt;= endDate) {
            // 最終行で最終日以降、翌月の日付を設定
            count++;
            calendar += "&lt;td class='disabled'&gt;" + (count - endDate) + "&lt;/td&gt;";
        } else {
            // 当月の日付を曜日に照らし合わせて設定
            count++;
            if(year == today.getFullYear()
              &amp;&amp; month == (today.getMonth())
              &amp;&amp; count == today.getDate()){
                calendar += "&lt;td class='today'&gt;" + count + "&lt;/td&gt;";
            } else {
                calendar += "&lt;td&gt;" + count + "&lt;/td&gt;";
            }
        }
    }
    calendar += "&lt;/tr&gt;";
}</code></pre>



<p>始めのfor文は行単位、2つ目のfor文はカラム（日付）単位で回します。</p>



<p>3行目、26行目ではtrタグで括っています。</p>



<p>6行目の条件は「1行目、かつ、1日の曜日未満」の場合に8、9行目の処理を行います。<br><span class="marker-under-blue">その場合にクラス「disabled」を付与して日付を設定します。</span><br>計算式は例で実際に当てはめてみましょう。</p>



<p>例：2021/01<br>lastMonthEndDate = 31<br>startDayOfWeek = 5 （金曜日）<br>日曜日：31 &#8211; 5 + 0 + 1 = 27<br>月曜日：31 &#8211; 5 + 1 + 1 = 28</p>



<p>10行目の条件は当月の最終日以降、翌月の日付を設定します。<br><span class="marker-under-blue">上記同様、<span class="marker-under-blue">クラス「disabled」を付与して日付を設定します。</span></span><span class="marker-under-blue"></span></p>



<p>それ以外の14行目～24行目の処理は当月の日付1日から末日まで入ります。<br>また、17行目～19行目の条件は本日の日付かどうかチェックしており、<span class="marker-under-blue">本日の場合はクラス「today」を付与しています。</span></p>



<h2 class="wp-block-heading"><span id="toc13">デモ</span></h2>



<p><a class="link" href="https://nyanblog2222.com/demo/calender1/">こちらがデモページ</a>になります。<br>初期表示は当月で表示され、本日が赤く表示されていると思います。</p>



<p>また、＜＞のボタンをクリックすることで月の移動ができますので、お試しください♪</p>



<h2 class="wp-block-heading"><span id="toc14">最後に</span></h2>



<p>いかがでしたでしょうか。<br>ライブラリを使わなくても意外と簡単に実装ができました！</p>



<p>この後、<span class="marker-under-red">カレンダーに祝日対応してみました</span>ので、<br>良ければこちらの投稿もご覧ください！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-related">

<a href="https://nyanblog2222.com/javascript/2835/" title="【初心者向け】JavaScriptで祝日対応のカレンダー作成【サンプル】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/68-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/68-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/68-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【初心者向け】JavaScriptで祝日対応のカレンダー作成【サンプル】</div><div class="blogcard-snippet internal-blogcard-snippet">JavaScriptで祝日対応のカレンダーを作成しました。内容：内閣府のWebサイトから取得したCSVファイルを読み込んで日付判定を行い、祝日を赤字表示させツールチップに祝日名を表示する。var request = new XMLHttpRequest();...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.01.09</div></div></div></div></a>
</div>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a href="https://nyanblog2222.com/programming/javascript/4717/" title="【サンプル】JavaScriptのコードまとめリンク集" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/85-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/85-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/85-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【サンプル】JavaScriptのコードまとめリンク集</div><div class="blogcard-snippet internal-blogcard-snippet">本記事では当ブログで上げているJavaScript記事のまとめリンク集になります。目次でカテゴリ分けをしているので、気になる内容がありましたら目次から飛んでみてください♪</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2022.09.01</div></div></div></div></a>
</div>
<p>投稿 <a href="https://nyanblog2222.com/programming/javascript/2749/">【初心者向け】JavaScriptでカレンダー作成【サンプル】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/javascript/2749/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA】Shift-JIS・UTF-8等、各種文字コードのファイル読み込み【コピペで使えるサンプル付き】</title>
		<link>https://nyanblog2222.com/programming/2291/</link>
					<comments>https://nyanblog2222.com/programming/2291/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 09:00:00 +0000</pubDate>
				<category><![CDATA[Access]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Shift-JIS]]></category>
		<category><![CDATA[UTF-8]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[ファイル読み込み]]></category>
		<category><![CDATA[文字コード]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=2291</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/35.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/35.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/35-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/35-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/35-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />今回はAccess等で使われるVBAで、Shift-JIS（SJIS）・UTF-8等、各種文字コードのファイルを読み込む方法を紹介します。内容としては、OpenステートメントやADODB.Streamを使った手法です。自 [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/2291/">【VBA】Shift-JIS・UTF-8等、各種文字コードのファイル読み込み【コピペで使えるサンプル付き】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/35.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/35.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/35-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/35-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/35-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>今回はAccess等で使われるVBAで、Shift-JIS（SJIS）・UTF-8等、各種文字コードのファイルを読み込む方法を紹介します。<br>内容としては、OpenステートメントやADODB.Streamを使った手法です。<br>自作関数のサンプルもつけてますので、是非ご活用ください！<br>また、同時にダイアログを開いて対象のファイル名を取得する方法も紹介してますので、良かったらそちらもどうぞ。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">紹介する手法</a></li><li><a href="#toc2" tabindex="0">共通で使っているテストデータやサブ関数</a><ol><li><a href="#toc3" tabindex="0">テストデータ</a></li><li><a href="#toc4" tabindex="0">（サブ関数）ダイアログを開いて対象のファイル名を取得する</a></li></ol></li><li><a href="#toc5" tabindex="0">Openステートメントでcsvファイル読み込み（Shift-JISのみ可）</a></li><li><a href="#toc6" tabindex="0">ADODB.Streamでcsvファイルを読み込む（UTF-8、Shift-JIS他）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">紹介する手法</span></h2>



<p>まず、本記事の簡単なまとめから♪</p>



<figure class="wp-block-table"><table><tbody><tr><td>・Openステートメント<br>　Shift-JISのみ<br>・ADODB.Stream　←　☆汎用性があるため個人的にはおすすめ<br>　Shift-JIS・UTF-8他</td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><span id="toc2">共通で使っているテストデータやサブ関数</span></h2>



<p>説明の際に使用するテストデータや、自作関数の中で呼び出しているサブ関数です。<br>本記事とは内容が離れますので、飛ばしてもらっても大丈夫です。</p>



<h3 class="wp-block-heading"><span id="toc3">テストデータ</span></h3>



<p>今回テストとして読み込むcsvファイルは以下を使用します。<br>（同じ内容で文字コードがShift-JIS・UTF-8のデータを用意）</p>



<pre class="wp-block-code"><code>No	郵便番号	住所	名前
1	859-5326	東京都春日井市向谷町１－６５	ヤマモトコーポレーション株式会社
2	987-2523	千葉県向田市山本町６５８－４４	華井　譲
3	789-0001	千葉県向田市山本町　ジンダ－ビル２F　２０１号	蓮田不動産株式会社
4	653-6567	大阪府大東市浅田８－９９９	株式会社ハッターフ
5	198-3463	鹿児島県薩摩川内市浜本１２３－７７	山本　茂</code></pre>



<h3 class="wp-block-heading"><span id="toc4">（サブ関数）ダイアログを開いて対象のファイル名を取得する</span></h3>



<p>ダイアログを開いて対象のファイル名を取得するサブ関数を用意しました。<br>直接ファイルパスを次項から紹介する関数のコード上に書いてしまっても良かったのですが、それではコピペして使いにくいので。。</p>



<p>内容としては、GetFileName_csvを呼び出すと、ダイアログを開いてcsvファイルのファイル名を取得し、戻り値として返す関数になります。</p>



<pre class="wp-block-code"><code>' GetFileName_csv
' csvファイル名を取得
Function GetFileName_csv()

    'ダイアログを開いてcsvファイルのファイル名を取得
    'Application.FileDialogを使うには、
    '参照設定でMicrosoft Office 1X.0 Object Libraryの追加が必要
    With Application.FileDialog(msoFileDialogOpen)
        .Filters.Clear
        .Filters.Add "csvファイル", "*.csv"
        .AllowMultiSelect = False
        If .Show = True Then
            GetFileName_csv = .SelectedItems(1)
        End If
    End With

End Function</code></pre>



<h2 class="wp-block-heading"><span id="toc5">Openステートメントでcsvファイル読み込み（Shift-JISのみ可）</span></h2>



<p>Openステートメントで、csvファイルを読み込む方法です。<br>Openステートメントでは、文字コードに合わせて対応していくことができないので、Accessのデフォルトの文字コードであるShift-JISでしか正しく読み取りできません。</p>



<p>以下、Openステートメントを使用したcsvファイル読込関数関数です。</p>



<pre class="wp-block-code"><code>' ReadCSVFile_Open
' csvファイル読込関数（Openステートメントを使用）
Sub ReadCSVFile_Open()
    
    'ファイル名取得
    Dim sOpenFileName As String
    sOpenFileName = GetFileName_csv
    If sOpenFileName = "" Then Exit Sub

    'ファイルを読み込んでイミディエイトウィンドウに内容を表示する
    Dim sBuf  As String
    Open sOpenFileName For Input As #1 'ファイルを開いて&#91;#1]という番号で管理
    Do Until EOF(1)
       Line Input #1, sBuf '1行づつバッファへ格納
       Debug.Print sBuf
    Loop
    Close #1
    
End Sub</code></pre>



<p>こちらの関数を使用して、Shift-JISのファイルを読み込んだ結果はこちらです。</p>



<p>ファイル名：SJIS.csv</p>



<pre class="wp-block-code"><code>No  郵便番号    住所    名前
1   859-5326    東京都春日井市向谷町１－６５    ヤマモトコーポレーション株式会社
2   987-2523    千葉県向田市山本町６５８－４４  華井　譲
3   789-0001    千葉県向田市山本町　ジンダ－ビル２F　２０１号   蓮田不動産株式会社
4   653-6567    大阪府大東市浅田８－９９９  株式会社ハッターフ
5   198-3463    鹿児島県薩摩川内市浜本１２３－７７  山本　茂</code></pre>



<p>正確に読み取れてますね。</p>



<p>試しにこの関数を使って、UTF-8も読み取ってみました。</p>



<p>ファイル名：UTF-8.csv</p>



<pre class="wp-block-code"><code>No  驛ｵ萓ｿ逡ｪ蜿ｷ    菴乗園  蜷榊燕
1   859-5326    譚ｱ莠ｬ驛ｽ譏･譌･莠募ｸょ髄隹ｷ逕ｺ・托ｼ搾ｼ厄ｼ・繝､繝槭Δ繝医さ繝ｼ繝昴Ξ繝ｼ繧ｷ繝ｧ繝ｳ譬ｪ蠑丈ｼ夂､ｾ
2   987-2523    蜊・痩逵悟髄逕ｰ蟶ょｱｱ譛ｬ逕ｺ・厄ｼ包ｼ假ｼ搾ｼ費ｼ・闖ｯ莠輔隴ｲ
3   789-0001    蜊・痩逵悟髄逕ｰ蟶ょｱｱ譛ｬ逕ｺ縲繧ｸ繝ｳ繝・阪ン繝ｫ・巽縲・抵ｼ撰ｼ大捷 闢ｮ逕ｰ荳榊虚逕｣譬ｪ蠑丈ｼ夂､ｾ
4   653-6567    螟ｧ髦ｪ蠎懷､ｧ譚ｱ蟶よｵ・伐・假ｼ搾ｼ呻ｼ呻ｼ・譬ｪ蠑丈ｼ夂､ｾ繝上ャ繧ｿ繝ｼ繝・
5   198-3463    鮖ｿ蜈仙ｳｶ逵瑚湊鞫ｩ蟾晏・蟶よｵ懈悽・托ｼ抵ｼ難ｼ搾ｼ暦ｼ・螻ｱ譛ｬ縲闌・</code></pre>



<p>全角が化けてしまっていますね。<br>前述のとおり、UTF-8を含む他の文字コードには対応していませんので、読み取る必要があれば次項をお使いください。</p>



<h2 class="wp-block-heading"><span id="toc6">ADODB.Streamでcsvファイルを読み込む（UTF-8、Shift-JIS他）</span></h2>



<p>ADODB.Streamで、csvファイルを読み込む方法です。<br>ADODB.Streamでは、UTF-8、Shift-JISを含む各種文字コードに対応しています。</p>



<p>以下、Openステートメントを使用したcsvファイル読込関数関数です。</p>



<pre class="wp-block-code"><code>' ReadCSVFile_ADODB
' csvファイル読込関数（ADODB.Streamを使用）
Sub ReadCSVFile_ADODB()
    
    'ファイル名取得
    Dim sOpenFileName As String
    sOpenFileName = GetFileName_csv
    If sOpenFileName = "" Then Exit Sub

    'ファイルを読み込んでイミディエイトウィンドウに内容を表示する
    Dim sBuf  As String
    With CreateObject("ADODB.Stream")
       .Charset = "UTF-8" 'SJISの場合、"shift_jis"
       .Open
       .LoadFromFile sOpenFileName
        Do Until .EOS
           sBuf = .ReadText(-2) '1行づつバッファへ格納
           Debug.Print sBuf
        Loop
       .Close
    End With
    
End Sub</code></pre>



<p>なお、上記関数をそのままコピペすると、UTF-8に対応した関数になります。<br>shift_jisに対応させる場合、</p>



<pre class="wp-block-code"><code>.Charset = "UTF-8"</code></pre>



<p>の部分を、</p>



<pre class="wp-block-code"><code>.Charset = "shift_jis"</code></pre>



<p>に書き換えてください。</p>



<p>その他、UTF-8、Shift-JIS以外の文字コードで読み取る場合は、<br>「レジストリエディタ」の「HKEY_CLASSES_ROOT\MIME\Database\Charset」から確認してください。<br>レジストリエディタは、<br>「Windowsマーク」キーと「R」キーを同時押し→ファイル名を指定して実行の画面が出たら、「regedit」と入力してエンターを押すと開くことができます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="634" height="384" src="https://nyanblog2222.com/wp-content/uploads/2020/09/regedit_mojicd-min.png" alt="レジストリエディタ" class="wp-image-2305" srcset="https://nyanblog2222.com/wp-content/uploads/2020/09/regedit_mojicd-min.png 634w, https://nyanblog2222.com/wp-content/uploads/2020/09/regedit_mojicd-min-300x182.png 300w" sizes="auto, (max-width: 634px) 100vw, 634px" /></figure>



<p>それでは、まずshift_jisのファイルを読み込んでみました。</p>



<p>ファイル名：SJIS.csv</p>



<pre class="wp-block-code"><code>No  郵便番号    住所    名前
1   859-5326    東京都春日井市向谷町１－６５    ヤマモトコーポレーション株式会社
2   987-2523    千葉県向田市山本町６５８－４４  華井　譲
3   789-0001    千葉県向田市山本町　ジンダ－ビル２F　２０１号   蓮田不動産株式会社
4   653-6567    大阪府大東市浅田８－９９９  株式会社ハッターフ
5   198-3463    鹿児島県薩摩川内市浜本１２３－７７  山本　茂</code></pre>



<p>正確に読み取れてますね。</p>



<p>ファイル名：UTF-8.csv</p>



<pre class="wp-block-code"><code>No  郵便番号    住所    名前
1   859-5326    東京都春日井市向谷町１－６５    ヤマモトコーポレーション株式会社
2   987-2523    千葉県向田市山本町６５８－４４  華井　譲
3   789-0001    千葉県向田市山本町　ジンダ－ビル２F　２０１号   蓮田不動産株式会社
4   653-6567    大阪府大東市浅田８－９９９  株式会社ハッターフ
5   198-3463    鹿児島県薩摩川内市浜本１２３－７７  山本　茂</code></pre>



<p>こちらも、正しく読み取ることができました♪</p>



<p>以上、今回の記事が参考になれば幸いです。<br>関連として、もしUTF-8について知りたい！という方はこちらの記事もご覧ください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-nyanblog-にゃんぶろぐ wp-block-embed-nyanblog-にゃんぶろぐ"><div class="wp-block-embed__wrapper">

<a href="https://nyanblog2222.com/windows/4659/" title="【ファイル】UTF-8のBOM付き、BOM無しの違い・確認・作成について" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/49-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/49-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/49-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/49-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/49-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【ファイル】UTF-8のBOM付き、BOM無しの違い・確認・作成について</div><div class="blogcard-snippet internal-blogcard-snippet">CSVファイルをExcelで確認すると文字化けすることはありませんか。それは文字コードがUTF-8のBOM無しで作成されているからかもしれません。本記事ではUTF-8のBOM付き、BOM無しの違い、確認方法、作成方法についてご紹介しています。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2022.07.15</div></div></div></div></a>
</div></figure>
<p>投稿 <a href="https://nyanblog2222.com/programming/2291/">【VBA】Shift-JIS・UTF-8等、各種文字コードのファイル読み込み【コピペで使えるサンプル付き】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/2291/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
