jQuery で最初に覚える click イベントと css メソッド

アプリケーションを作成する上で最も重要なのは『イベント』の定義です。jQuery では、直接的なメソッド( 例:click メソッド )でイベントが定義できますが、ここでは全て on メソッドで定義します。

css メソッド以外にも重要な valtexthtmlprop と言った基本的なメソッドがありますが、HTML の知識があれば比較的理解して用いるのは容易です。しかし、css メソッドの中身はとても複雑で効果も知ってなければなかなか想像できない結果が起きるので、たくさん実行して慣れる事が重要です。

さらに、jQiery では画面上のコンテンツをオブジェクトとして選択する為に、CSS で使用する『セレクタ』という記述を使用します。その中で、代表的なのは id と 要素と クラスになります。

以下は、jQuery では無く CSS で定義されたものです。
01.<style>
02.#sei,#mei {
03.        background-color: pink;
04.}
05.#simei {
06.        background-color: skyblue;
07.}
08.div input {
09.        border: 1px solid #888;
10.        border-radius: 5px;
11.}
12..entry,.output {
13.        padding: 5px;
14.}
15.</style>
16.<div>
17.        <input class="entry" type="text" id="sei">
18.        <input class="entry" type="text" id="mei">
19.        <input class="output" type="text" id="simei">
20.</div>
21.<input type="button" id="btn" value="実行">

まず、# を使用して id 属性が書かれた要素を特定します。id はユニークである必要があるので、個別に処理をしたい場合に必要となります。#sei,#mei と記述しているのは、両方とも対象とするという事です。

次に要素名で書く場合は、その要素が全て対象になります。画面内の仕様として全て同じ見せ方をしい場合の標準のセッティングに使えますが、div input と書いているのは、DIV 要素の子要素にある INPUT 要素と言う意味で、検索の条件として使用しています。

さらに、設計者にとって特別な意味を持つグループを定義する為の クラスを使用します。クラスは class="クラス名" の定義に対して、名前の前に .(ドット) を使ってクラスである事を示します。

これらの選択方法を使って、jQuery は要素を選択してオブジェクトとして扱います。

では、実際に CSS から jQuery のメソッドに変更してみましょう
1.$("#btn").on("click", function(){
2.        $("#sei,#mei").css({ "background-color": "pink" });
3.        $("#simei").css({ "background-color": "skyblue" });
4.        $("div input").css({ "border": "1px solid #888", "border-radius": "5px" });
5.        $(".entry,.output").css({ "padding": "5px" });
6.        console.dir( this ); // this は DOM オブジェクト
7.        console.log( $(this).val() );
8.});

style 要素内を全てコメントにするか、または削除して jQuery のコードで全く同じ記述を行います。但し、見た目は同じ結果でもページ内の定義は全て要素内のインラインスタイルとして実装されます。デベロッパーツールで参照すると以下のようになります。
1.<input class="entry" type="text" id="sei" style="background-color: pink; border: 1px solid rgb(136, 136, 136); border-radius: 5px; padding: 5px;">
2.<input class="entry" type="text" id="mei" style="background-color: pink; border: 1px solid rgb(136, 136, 136); border-radius: 5px; padding: 5px;">
3.<input class="output" type="text" id="simei" style="background-color: skyblue; border: 1px solid rgb(136, 136, 136); border-radius: 5px; padding: 5px;">

CSS の効果には優先順位があり、インラインスタイルは STYLE 要素の記述より優先されます。また、STYLE 要素内では後から書いたほうが優先(上書き)されますが、それらを全て無視して特別にその CSS を適用したい場合は、!important を使用します。

但し、jQuery では !important を指定できないので、STYLE 要素を作成してテキストとして CSS を記述してヘッド要素に追加するか、cssText を使用して直接インライン記述を書きます。

jQuery の css メソッドは、既存のインライン記述に追加されますが、cssText は既存のインライン記述を上書きするので注意が必要です。

💘 style 要素の追加

1.$("<style></style>")
2.    .text( ".output{background-color:white!important }")
3.    .appendTo(document.head);

💘 cssText を使用




jQuery

jQuery で TABLE の 行内の 一つのTD をクリック。その後、他の TD 内のテキストを取得する / nextAll と prevAll

nextAll は、起点となる要素から下方向に存在する同じ階層の要素を全て取得します。引数にセレクタが指定できるので、ここでは TD にクラスを設定して目的の要素を特定しています。

特定する要素の属性が無い場合は、$(this).nextAll().eq(0).text() のようにして eq(順序番号) を指定して特定できます。但し、prevAll では近い要素から順序番号が小さくなるので注意して下さい。

コード 名称 金額 購入日 担当者 発注先
0002 問題集 002 4000 2015/08/24 田中 発注先002
0003 問題集 003 3000 2015/08/23 山田 発注先003
0004 問題集 004 2000 2015/08/22 山田 発注先004
0001 問題集 001 1000 2015/08/21 田中 発注先001
001.<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
002.<script>
003.$(function() {
004. 
005.        // 名称のリンクに設定したクラスでイベント作成
006.        // ※ 各 td のクラスで取得
007.        $(".check").on("click", function(){
008.                $("#cd").val($(this).prevAll(".t0").text());
009.                $("#name").val($(this).text());
010.                $("#kin").val($(this).nextAll(".t1").text());
011.                $("#bdate").val($(this).nextAll(".t2").text());
012.                $("#tanto").val($(this).nextAll(".t3").text());
013.                $("#co").val($(this).nextAll(".t4").text());
014.        });
015. 
016.        // 購入日のリンクに設定したクラスでイベント作成
017.        // ※ 各 td の順序で取得
018.        $(".t2").on("click", function(){
019.                $("#cd").val($(this).prevAll().eq(2).text());
020.                $("#name").val($(this).prevAll().eq(1).text());
021.                $("#kin").val($(this).prevAll().eq(0).text());
022.                $("#bdate").val($(this).text());
023.                $("#tanto").val($(this).nextAll().eq(0).text());
024.                $("#co").val($(this).nextAll().eq(1).text());
025.        });
026. 
027.});
028. 
029.</script>
030.<style type="text/css">
031..check, .t2 {
032.        text-decoration: underline;
033.        cursor: pointer;
034.        color: blue;
035.}
036.#target_area th, #target_area td {
037.        padding: 5px;
038.}
039.#target_area input {
040.        width:120px;
041.        font-size: 18px;
042.}
043.#target_area table {
044.        margin-top: 10px;
045.        border-collapse: collapse;
046.        border: solid #000000 1px;
047.        background-color: #ffffff;
048.}
049.#target_area th {
050.        border: solid #000000 1px;
051.        background-color: silver;
052.}
053.#target_area td {
054.        border: solid #000000 1px;
055.}
056.</style>
057.<div id="target_area">
058.<p><input id="cd"> <input id="name"> <input id="kin"></p>
059.<p><input id="bdate"> <input id="tanto"> <input id="co"></p>
060.<table>
061.        <tbody>
062.        <tr>
063.                <th>コード</th>
064.                <th>名称</th>
065.                <th>金額</th>
066.                <th>購入日</th>
067.                <th>担当者</th>
068.                <th>発注先</th>
069.        </tr>
070.        <tr>
071.                <td class="t0">0002</td>
072.                <td class="check">問題集 002</td>
073.                <td class="t1">4000</td>
074.                <td class="t2">2015/08/24</td>
075.                <td class="t3">田中</td>
076.                <td class="t4">発注先002</td>
077.        </tr>
078.        <tr>
079.                <td class="t0">0003</td>
080.                <td class="check">問題集 003</td>
081.                <td class="t1">3000</td>
082.                <td class="t2">2015/08/23</td>
083.                <td class="t3">山田</td>
084.                <td class="t4">発注先003</td>
085.        </tr>
086.        <tr>
087.                <td class="t0">0004</td>
088.                <td class="check">問題集 004</td>
089.                <td class="t1">2000</td>
090.                <td class="t2">2015/08/22</td>
091.                <td class="t3">山田</td>
092.                <td class="t4">発注先004</td>
093.        </tr>
094.        <tr>
095.                <td class="t0">0001</td>
096.                <td class="check">問題集 001</td>
097.                <td class="t1">1000</td>
098.                <td class="t2">2015/08/21</td>
099.                <td class="t3">田中</td>
100.                <td class="t4">発注先001</td>
101.        </tr>
102.        </tbody>
103.</table>
104.</div>





jQuery : ページ右下にページ先頭にジャンプするリンクを表示させる( アニメーションは無し )

このブログで実装しているものを jQuery に置き換えたものです。リンクは、スクロールしていない先頭では表示されませんが、少しスクロールすると表示されます。
01.<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
02.<script>
03.$(function(){
04. 
05.        // ページ右下固定位置のリンク
06.        var scroll_top = $("<a id='scroll_top'>▲</a>")
07.        scroll_top.prop("href","javascript:void(0)");
08.        scroll_top.css({
09.                "position": "fixed",
10.                "text-decoration": "none",
11.                "font-size" : "40px",
12.                "color" : "rgba(255,255,255,0.85)",
13.                "text-shadow" : "1px 1px 2px #656a6f",
14.                "right" : "0.5%",
15.                "bottom" : "5rem",
16.                "display" : "none"
17.        });
18. 
19.        // クリックした時の処理
20.        scroll_top.on("click", function(){
21.                window.scroll(0,0);
22.        });
23. 
24.        // ページの最後に追加
25.        $("body").append( scroll_top );
26. 
27.        // スクロールが無い先頭部分では表示しない
28.        $(window).on("scroll",function(){
29.                var scroll = $("html").scrollTop();
30.                if ( scroll <= 200 && $("#scroll_top").css("display") != "none" ) {
31.                        $("#scroll_top").css("display","none");
32.                }
33.                if ( scroll > 200 && $("#scroll_top").css("display") == "none" ) {
34.                        $("#scroll_top").css("display","");
35.                }
36.        });    
37. 
38.});
39.</script>





IE11 で Excel のブックにアクセスする / JavaScript を使用して Excel のブックのセルにデータをセットして更新

⭕ まず、信頼するサイトlocalhost( またはイントラネットのサーバ ) を登録します。



⭕ レベルのカスタマイズで『スクリプトを実行しても安全だとマークされていないActiveX コントロール』を『有効』にします。



▼ 以下の .reg ファイルをエクスプローラからダブルクリックしてインポートする事もできます
1.Windows Registry Editor Version 5.00
2. 
3.[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2]
4."1201"=dword:00000000

▼ .reg ファイルをダウンロード
その上で以下のコードを localhost で実行が可能です。
01.<!DOCTYPE html>
02.<html>
03.<head>
04.<meta http-equiv="X-UA-Compatible" content="IE=edge">
05.<meta http-equiv="Content-type" content="text/html; charset=shift_jis">
06.<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
07.<script>
08. 
09.// *************************************
10.// IE 用オブジェクト作成関数
11.// *************************************
12.function newObject( className ) {
13. 
14.        var obj;
15. 
16.        try {
17.                obj = new ActiveXObject( className );
18.        }
19.        catch (e) {
20.                obj = null;
21.        }
22. 
23.        return obj;
24. 
25.}
26. 
27.// *************************************
28.// Excel 用オブジェクト 格納変数
29.// *************************************
30.var excelApp = null;
31.var myBook = null;
32. 
33.// *************************************
34.// Exce ブックを読み込んで更新して終了
35.// *************************************
36.function excelTest() {
37. 
38.        // Excel オブジェクト作成
39.        if ( excelApp == null ) {
40.                 excelApp = newObject("Excel.Application");
41.        }
42. 
43.        // Excel ブックの読み込み
44.        myBook = excelApp.Workbooks.Open("C:\\Users\\lightbox\\Documents\\Book1.xlsx");
45. 
46.        // アクティブなウィンドウを最大化
47.        excelApp.ActiveWindow.WindowState = 2;
48.        // 表示時様態にする
49.        excelApp.Visible = true;
50. 
51.        // jQuery でオブジェクトの一覧を取得して Excel のセルに情報をセットする
52.        var row = 0;
53.        $.each( window.navigator, function( key, value ){
54. 
55.                row++;
56.                // シートのセルに書き込み
57.                myBook.Sheets("Sheet1").Cells(row, 1) = key;
58.                myBook.Sheets("Sheet1").Cells(row, 2) = typeof value;
59.                myBook.Sheets("Sheet1").Cells(row, 3) = value;
60. 
61.        });
62. 
63.        // 保存
64.        myBook.Save();
65. 
66.        // Excel の終了
67.        if ( excelApp != null ) {
68.                excelApp.Quit();
69.                excelApp = null;
70.        }
71. 
72.}
73. 
74.</script>
75.</head>
76.<body>
77.<input id="export" type="button" value="Excel のテスト" onclick="excelTest();">
78.</body>
79.</html>




localStorage に保存して、次回の表示に使用する

タブやアコーディオンや、限られた視野の範囲で効率良く表示するコンテンツは、最後に表示したものを記憶しておくのが良いと思います。

物事を始めたり終えたりするのに、適当な時機
01.<script>
02.$(function() {
03.        var target_tab = 0;
04.        if ( typeof(localStorage["old_active"]) != 'undefined' ) {
05.                target_tab = localStorage["old_active"];
06.        }
07.        $( "#mytabs" ).tabs({
08.                active: target_tab,
09.                activate: function( event, ui ) {
10.                        localStorage["old_active"] = $( this ).tabs( "option", "active" );
11.                }
12.        });
13.});
14.</script>
15. 
16.<div id="mytabs">
17. 
18.        <ul>
19.                <li><a href="#tabs-1">潮時</a></li>
20.                <li><a href="#tabs-2">確信犯</a></li>
21.                <li><a href="#tabs-3">おもむろに</a></li>
22.        </ul>
23.        <div id="tabs-1">
24.物事を始めたり終えたりするのに、適当な時機
25.        </div>
26.        <div id="tabs-2">
27.<p>1 本人が悪いことでないと確信してなされる犯罪</p>
28.<p>2 《1から転じて》悪いことだとわかっていながら行われた犯罪や行為</p>
29.<p>◆犯罪というほど重大な行為でない場合にも用いる。2 の意はもともと誤用とされていたが、文化庁が発表した平成14年度「国語に関する世論調査」では、50パーセント以上の人が 1 ではなく 2 の意で用いると回答した。</p>
30.        </div>
31.        <div id="tabs-3">
32.【徐に】落ち着いて、ゆっくりと行動するさま
33.        </div>
34.</div>

jQuery 部分は全て Google のホスティングを使用しています。