javascriptでDOM操作

Javascript

今回はjavascriptでdom関連の操作を紹介します。

タグ検索

下記のHTMLタグにより、タグの検索を行います。

<body>
    <div id=”div1″ class=”div-test”>test1</div>
    <div id=”div2″ class=”div-test”>test2</div>
    <div id=”div3″ class=”div-test2″>test3</div>
    <form>
        <input name=”name” value=”” type=”text”>
        <input name=”sex” type=”radio”>
        <input name=”btn” value=”btn” type=”button”>
    </form>
</body>

IDで検索

    var div1 = document.getElementById(‘div1’);

Nameで検索

    var inputs = document.getElementsByName(‘name’);

タグ名で検索

var divs = document.getElementsByTagName(‘div’);

cssクラス名で検索

var divs2 = document.getElementsByClassName(‘div-test’);

H5追加(cssセレクター)

    var div2 = document.querySelector(‘#div2’);
    var divs3 = document.querySelectorAll(‘.div-test’);

タグのスタイル変更

cssでfont-sizeで文字サイズを指定できますが、jsではfontSizeで指定できます。

    var divs = document.querySelectorAll(‘div’);

    for (var i=0; i< divs.length; i++) {
        divs[i].style.backgroundColor = ‘red’;
    }

要素にイベントを追加する方法

タグの中で

<body>
    <input type=”button” value=”ボタン” onclick=”test()”>
</body>
<script>
    function test() {
        alert(“test”);
    }
</script>

プロパティで

<body>
    <input type=”button” value=”ボタン” id=”btn”>
</body>
<script>
    document.getElementById(‘btn’).onclick = function() {
        alert(“test”);
    }
</script>

addEventListenerで

<body>
    <input type=”button” value=”ボタン” id=”btn”>
</body>
<script>
    document.getElementById(‘btn’).addEventListener(‘click’, function() {
        alert(“test”);
    });
</script>

要素にイベントを削除する方法

プロパティで

<body>
    <input id=”btn1″ type=”button” value=”btn” onclick=”f1()”>
</body>
<script>
    function f1() {
        alert(“test”);
    }

    document.getElementById(‘btn1’).onclick = “”;
</script>

removeEventListenerで

<body>
    <input type=”button” value=”ボタン” id=”btn”>
</body>
<script>
    var f1 = function() {
        alert(“test”);
    };

    document.getElementById(‘btn’).addEventListener(‘click’, f1);

    document.getElementById(‘btn’).removeEventListener(‘click’, f1);
</script>

イベント関数のthisについて

<body>
    <!– thisはwindow–>
    <input id=”btn1″ type=”button” value=”btn1″ onclick=”f1()”>
    <input id=”btn2″ type=”button” value=”btn2″ onclick=”f1()”>
    <input id=”btn3″ type=”button” value=”btn3″ onclick=”f1()”>
</body>
<script>
    function f1() {
        console.log(this);
    }
    // thisはinputタグ
    document.getElementById(‘btn2’).onclick = f1;
    // thisはinputタグ
    document.getElementById(‘btn3’).addEventListener(‘click’,f1);

</script>

イベントハンドラー一覧

load タグなど資源がロードされた後
①window.onload = function(){}
②<body onload=”f1()”>
focus 要素がフォーカスを受け取ったときに発生します。
blur 要素がフォーカスを失ったときに発生します。
mouseenter マウス のホットスポットが最初にイベントが発生した要素の中に移動したとき
Element に発生します。
mouseover (マウスやトラックパッドなど) のカーソルが要素またはその子要素の
うちの一つの上を移動したときElement に発生します。
mousemove マウスなどのポインティングデバイスで、カーソルのホットスポットが要素内
にある間に動いた時に発行されるイベントです。
mousedown ポインターが要素の中にあるときにポインティングデバイスのボタンが押下されたとき
 Element に発行されます。
mouseup  Element においてポインターが中にあるときにポインティングデバイス
 (マウスやトラックパッドなど) のボタンが離されたときに発生します。
click 要素のマウスクリックをシミュレートします。
dblclick マウスのカーソルが要素の上にある状態で、
マウスが極めて短い間隔で二回クリックされた時に発生するイベントです。
contextmenu 右クリックした時に表示
mouseleave マウスが対象の要素から離れたときに発生する
mouseout 要素の上から外した時のイベント
select input,textareaの内容が選択される
copy 要素がコピーされるとき
keydown キーが押されたときに発生する
keypress キーボードを押しっぱなしにすると、一定間隔でkeypressが発生します。
keyup キーが離されたときに発生します。
reset フォームのリセットボタン押下
submit 送信されたときに発生します。
change ユーザーによる要素の値の変更が確定したときに発生します。
input ユーザーの操作によって値が変更されたときに発生する

クリックイベント1回のみ発生

方法1

<body>
    <input id=”btn1″ type=”button” value=”btn1″>
</body>
<script>
    function f1() {
        console.log(“click”);
        this.onclick = “”
    }
    
    document.getElementById(‘btn1’).onclick = f1;

</script>

方法2

<body>
    <input id=”btn1″ type=”button” value=”btn1″>
</body>
<script>
    function f1() {
        console.log(“click”);
        this.removeEventListener(‘click’, f1);
    }

    document.getElementById(‘btn1’).addEventListener(‘click’, f1);

</script>

タグの操作

<script>
    // ‘<div>test</div>’
    var tag = document.createElement(‘div’);
    var text = document.createTextNode(‘text’);

    console.log(tag.hasChildNodes());
    tag.appendChild(text);
    console.log(tag);
    console.log(tag.hasChildNodes());

    tag.removeChild(text);
    console.log(tag);

    var li = document.getElementById(‘a’);
    var ul = document.querySelector(‘ul’);
    var li2 = li.cloneNode(true);
    ul.appendChild(li2);

    console.log(ul.innerHTML);
    console.log(ul.innerText);
    ul.innerHTML = ‘<li>gogo</li>’;
</script>

タグのプロパティ操作

<body>
    <div id=”div1″ class=”test” abcd=”cdef”>testdiv</div>
</body>
<script>
    var div1 = document.getElementById(‘div1’);

    console.log(div1.getAttribute(‘id’));
    console.log(div1.getAttribute(‘abcd’));

    div1.setAttribute(‘id’, ‘newid’);
    div1.setAttribute(‘abcd’, ‘newabcd’);
    
    console.log(div1.hasAttribute(‘abcd’));

    console.log(div1.id);
    console.log(div1.className); // classの設定値を取得

    div1.className = “test2”;  // classの設定値を変更
    div1.className += ” test3″; // classの設定値を追加
</script>
 
node.nextElementSibling 同じ親要素を持って隣接する次の要素です
node.previousElementSibling 同じ親要素を持って隣接する前の要素です。
node.parentElement 親の Element を返します。
node.firstElementChild 最初の子要素を取得する
node.lastElementChild 最後の子要素を取得する

イベントオブジェクト

    document.getElementById(‘div1’).onclick = function(e) {
        var evt = e || window.event;
        console.log(evt);
    }

css操作(classList)

メソッド名 機能
node.classList.add クラスを追加する
node.classList.remove クラスを削除する
node.classList.contains クラスが含まれているか確認する
node.classList.toggle クラスが含まれていれば削除、
含まれていなければ追加する

イベントを親要素へ伝搬

<body>
    <style>
        .active {
            background-color: red;
        }
    </style>
    <div id=”div1″>
        <ul>
            <li class=”active”>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </div>
    <script>
        document.getElementById(‘div1’).onclick = function (e) {
            var evt = e || window.event;
            if (e.target.nodeName == ‘LI’) {
                var active = e.target.parentElement.querySelector(‘.active’);
                active.classList.remove(‘active’);
                e.target.classList.add(‘active’);
            }
        }
    </script>
</body>
タイトルとURLをコピーしました