JavaScript before() メソッド

概要: このチュートリアルでは、JavaScript の before() メソッドを使用して、要素の前にノードを挿入する方法を学習します。

JavaScript before() メソッドの紹介

element.before() メソッドを使用すると、element の前に1つ以上のノードを挿入できます。以下は、before() メソッドの構文を示しています。

Element.before(node)Code language: JavaScript (javascript)

この構文では、before() メソッドは DOM ツリー内の要素の前にノードを挿入します。

たとえば、<p> 要素があり、その前に <h1> 要素を挿入する場合、次のように before() メソッドを使用できます。

p.before(h1)Code language: JavaScript (javascript)

要素の前に複数のノードを挿入するには、次のように before() メソッドにノードを渡します。

Element.before(node1, node2, ... nodeN)Code language: JavaScript (javascript)

また、before() メソッドは、ノードではなく、1つ以上の文字列を受け入れます。この場合、before() メソッドは文字列を Text ノードとして扱います。

Element.before(str1, str2, ... strN)Code language: JavaScript (javascript)

before() メソッドは undefined を返します。ノードを挿入できない場合、before() メソッドは HierarchyRequestError 例外をスローします。

JavaScript before() の例

JavaScript before() メソッドを使用する例をいくつか見てみましょう。

1) JavaScript before() を使用して要素の前にノードを挿入する

次の例では、before() メソッドを使用して、段落の前に <h1> を挿入します。

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>JavaScript DOM - before()</title>
    </head>

    <body>

        <p>This is JavaScript DOM before() method demo.</p>

        <script>
            const p = document.querySelector('p');

            // create a new h1 element
            const h1 = document.createElement('h1');
            h1.innerText = 'JavaScript DOM - before()';

            // insert the h1 before the paragraph
            p.before(h1);
        </script>
    </body>

</html>Code language: HTML, XML (xml)

仕組み

まず、querySelector() メソッドを使用して <p> 要素を取得します。

const p = document.querySelector('p');Code language: JavaScript (javascript)

次に、新しい見出し要素を作成し、その innerText を設定します。

const h1 = document.createElement('h1');
h1.innerText = 'JavaScript DOM - before()';Code language: JavaScript (javascript)

3番目に、段落要素の前に <h1> 要素を挿入します。

p.before(h1);Code language: JavaScript (javascript)

2) JavaScript before() を使用して要素の前に複数のノードを挿入する

次の例では、before() メソッドを使用して、要素の前に複数のノードを挿入します。

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>JavaScript DOM - before()</title>
    </head>

    <body>
        <ul>
            <li>Angular</li>
            <li>Vue</li>
        </ul>
        <script>
            const list = document.querySelector('ul');

            const libs = ['React', 'Meteor', 'Polymer'];
            const items = libs.map((lib) => {
                const item = document.createElement('li');
                item.innerText = lib;
                return item;
            });

            list.firstChild.before(...items);

        </script>
    </body>

</html>Code language: HTML, XML (xml)

仕組み

まず、querySelector() メソッドを使用して ul 要素を選択します。

 const list = document.querySelector('ul');Code language: JavaScript (javascript)

次に、文字列の配列を定義します。実際には、API 呼び出しから取得する場合があります。

 const libs = ['React', 'Meteor', 'Polymer'];Code language: JavaScript (javascript)

3番目に、map() メソッドを使用して、文字列の配列を li 要素の配列に変換します。

const items = libs.map((lib) => {
  const item = document.createElement('li');
  item.innerText = lib;
  return item;
});Code language: JavaScript (javascript)

最後に、ul 要素の最初の子の前にリスト項目要素を挿入します。

list.firstChild.before(...items);Code language: JavaScript (javascript)

...items は、スプレッド演算子を使用して items 配列の要素を展開することに注意してください。

<ul> 要素は次のようになります。

<ul>
    <li>React</li>
    <li>Meteor</li>
    <li>Polymer</li>
    <li>Angular</li>
    <li>Vue</li>
</ul>Code language: HTML, XML (xml)

最初の3つの項目(React、Meteor、Polymer)は、<ul> 要素の最初の子であった項目 Angular の前に挿入されました。

3) JavaScript before() を使用して文字列を挿入する

before() メソッドで文字列を使用する場合、before() メソッドはそれらを Text ノードとして扱います。例えば

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>JavaScript DOM - before()</title>
        <style>
            button {
                padding: 0.75em 1em;
                background-color: #F7DF1E;
                color: #000;
                cursor: pointer;
                border-radius: 50vw;
            }
        </style>
    </head>

    <body>
        <button>Donate Here</button>
        <script>
            const button = document.querySelector('button');
            button.firstChild.before('🧡 ');

        </script>
    </body>

</html>Code language: HTML, XML (xml)

まとめ

  • element.before() メソッドを使用して、要素の前に1つ以上のノードを挿入します。

クイズ

このチュートリアルは役に立ちましたか?