ぺんぎんらぼ

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です。たまに絵を描きます。

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です

jQueryで親要素・子要素・兄弟要素を取得する時に使うメソッド8つ

  • 子&子孫要素はfind()
  • 親先祖要素はclosest()
  • 兄弟要素はsiblings()

が、検索対象が広いので使いやすく感じています。

(1) マッチした子要素を取得 .children()

1段階下の階層までしかDOMツリーを遡って探してくれない。
子要素しか検索対象にせず、孫要素以降はみてくれない。
子要素がマッチすれば当該子要素のjQueryオブジェクトを配列(要素数1の)で返す。
なければ要素数0の配列を返却。
2つ下以降の階層も探してほしい時はfind()を使う。

しばらくjQueryに触れていないと、.child()というメソッドも存在したような気がしてくるが、
.child()などというものはない。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$(document).ready(function(){
   // マッチしたjQueryオブジェクトを返却
   var target = $("#d").children("div");
   console.log(target.attr("id"), target.size()); // c 1
 
   // 子までしか探しに行かない
   var target = $("#d").children("#b"); // #bは#dから見て孫の位置
   console.log(target.attr("id"), target.size()); // undefined 0
});
</script>
</head>
<body>
    <div id="d" style="padding: 25px; border:1px solid black; width:100px; height:150px;">
        <div id="c" style="padding: 25px; border:1px solid black; width:50px; height:100px;">
            <div id="b" style="padding: 10px; border:1px solid black; width:25px; height:75px;">
                <span id="a1">
                a1
                </span>
                <span id="a2">
                a2
                </span>
                <span id="a3">
                a3
                </span>
            </div>
        </div>
    </div>
</body>
</html>
(2) マッチするすべての子・孫要素を取得 .find()

2段階下以降、孫要素以降の階層もDOMツリーを遡って探してくれる。
マッチした”すべての”jQueryオブジェクトを配列で返却する。
なければ要素数0の配列を返却。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$(document).ready(function(){
   // マッチした"複数の"jQueryオブジェクトを返却
   var target = $("#d").find("div");
   console.log(target.attr("id"), target.size()); // c 2
 
   // 孫以降も遡って探してくれる
   var target = $("#d").find("#b");
   console.log(target.attr("id"), target.size()); // b 1
});
</script>
</head>
<body>
    <div id="d" style="padding: 25px; border:1px solid black; width:100px; height:150px;">
        <div id="c" style="padding: 25px; border:1px solid black; width:50px; height:100px;">
            <div id="b" style="padding: 10px; border:1px solid black; width:25px; height:75px;">
                <span id="a1">
                a1
                </span>
                <span id="a2">
                a2
                </span>
                <span id="a3">
                a3
                </span>
            </div>
        </div>
    </div>
</body>
</html>
(3) マッチした親要素を取得 .parent()

1段階上の階層までしかDOMツリーを遡って探してくれない。
親要素しか検索対象にせず、先祖要素以降はみてくれない
親要素がマッチすれば当該親要素のjQueryオブジェクトを配列(要素数1の)で返すが、
なければ要素数0の配列を返却。
2つ上以降の階層も探してほしい時はparents()かclosest()を使う。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$(document).ready(function(){
   // マッチしたjQueryオブジェクトを返却
   var target = $("#b").parent("div");
   console.log(target.attr("id"), target.size()); // c 1
 
   // 親までしか探しに行かない
   var target = $("#b").parent("#d"); // #dは#bから見て先祖の位置
   console.log(target.attr("id"), target.size()); // undefined 0
});
</script>
</head>
<body>
    <div id="d" style="padding: 25px; border:1px solid black; width:100px; height:150px;">
        <div id="c" style="padding: 25px; border:1px solid black; width:50px; height:100px;">
            <div id="b" style="padding: 10px; border:1px solid black; width:25px; height:75px;">
                <span id="a1">
                a1
                </span>
                <span id="a2">
                a2
                </span>
                <span id="a3">
                a3
                </span>
            </div>
        </div>
    </div>
</body>
</html>
(4) マッチするすべての親・先祖要素を取得 .parents()

2段階上以降、先祖要素以降もDOMツリーを遡って探してくれる。
マッチした”すべての”jQueryオブジェクトを配列で返却する。
取得した要素のセットの順番は、直近の親から外側に向かって並べられる。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$(document).ready(function(){
   // マッチした"複数の"jQueryオブジェクトを返却
   var target = $("#b").parents("div");
   console.log(target.attr("id"), target.size()); // c 2
 
   // 先祖以降も遡って探してくれる
   var target = $("#b").parents("#d"); // #dは#bから見て先祖の位置
   console.log(target.attr("id"), target.size()); // d 1
});
</script>
</head>
<body>
    <div id="d" style="padding: 25px; border:1px solid black; width:100px; height:150px;">
        <div id="c" style="padding: 25px; border:1px solid black; width:50px; height:100px;">
            <div id="b" style="padding: 10px; border:1px solid black; width:25px; height:75px;">
                <span id="a1">
                a1
                </span>
                <span id="a2">
                a2
                </span>
                <span id="a3">
                a3
                </span>
            </div>
        </div>
    </div>
</body>
</html>
(5) マッチした初めの親・先祖要素を取得 .closest()

2段階上以降、先祖要素以降もDOMツリーを遡って探してくれる。 マッチした当該要素のjQueryオブジェクトを配列(要素数1の)で返す。 なければ要素数0の配列を返却。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$(document).ready(function(){
   // マッチした"一番近い一つの"jQueryオブジェクトを返却.ただし自要素も含む
   var target = $("#b").closest("div");
   console.log(target.attr("id"), target.size()); // b 1
 
   // 先祖以降も遡って探してくれる
   var target = $("#b").closest("#d"); // #dは#bから見て先祖の位置
   console.log(target.attr("id"), target.size()); // d 1
});
</script>
</head>
<body>
    <div id="d" style="padding: 25px; border:1px solid black; width:100px; height:150px;">
        <div id="c" style="padding: 25px; border:1px solid black; width:50px; height:100px;">
            <div id="b" style="padding: 10px; border:1px solid black; width:25px; height:75px;">
                <span id="a1">
                a1
                </span>
                <span id="a2">
                a2
                </span>
                <span id="a3">
                a3
                </span>
            </div>
        </div>
    </div>
</body>
</html>
(6) マッチした弟要素を取得 .next()

同じ階層レベルの直後の要素が検索対象。
マッチした当該要素のjQueryオブジェクトを配列(要素数1の)で返す。
なければ要素数0の配列を返却。 直後以降の弟も検索対象にしたい場合はsiblings()。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$(document).ready(function(){
   // マッチしたjQueryオブジェクトを返却
   var target = $("#a1").next("span");
   console.log(target.attr("id"), target.size()); // a2 1
 
   // 直後の兄弟までしか探しにいかない
   var target = $("#a1").next("#a3"); // #3は#1から見て2つ隣
   console.log(target.attr("id"), target.size()); // undefined 0
});
</script>
</head>
<body>
    <div id="d" style="padding: 25px; border:1px solid black; width:100px; height:150px;">
        <div id="c" style="padding: 25px; border:1px solid black; width:50px; height:100px;">
            <div id="b" style="padding: 10px; border:1px solid black; width:25px; height:75px;">
                <span id="a1">
                a1
                </span>
                <span id="a2">
                a2
                </span>
                <span id="a3">
                a3
                </span>
            </div>
        </div>
    </div>
</body>
</html>
(7) マッチした兄要素を取得 .prev()

同じ階層レベルの直前の要素が検索対象。
マッチした当該要素のjQueryオブジェクトを配列(要素数1の)で返す。 なければ要素数0の配列を返却。 直前以降の兄も検索対象にしたい場合はsiblings()。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$(document).ready(function(){
   // マッチしたjQueryオブジェクトを返却
   var target = $("#a3").prev("span");
   console.log(target.attr("id"), target.size()); // a2 1
 
   // 直前の兄弟要素までしか探しにいかない
   var target = $("#a3").prev("#a1"); // #1は#3から見て2つ隣
   console.log(target.attr("id"), target.size()); // undefined 0
});
</script>
</head>
<body>
    <div id="d" style="padding: 25px; border:1px solid black; width:100px; height:150px;">
        <div id="c" style="padding: 25px; border:1px solid black; width:50px; height:100px;">
            <div id="b" style="padding: 10px; border:1px solid black; width:25px; height:75px;">
                <span id="a1">
                a1
                </span>
                <span id="a2">
                a2
                </span>
                <span id="a3">
                a3
                </span>
            </div>
        </div>
    </div>
</body>
</html>
(8) マッチしたすべての兄弟要素を取得 .siblings()

同じ階層レベルのすべての要素が検索対象。
マッチした”すべての”jQueryオブジェクトを配列で返却する。 なければ要素数0の配列を返却。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$(document).ready(function(){
   // マッチしたjQueryオブジェクトを返却
   var target = $("#a3").siblings("span");
   console.log(target.attr("id"), target.size()); // a1 2
 
   // 兄弟ぜんぶ探してくれる
   var target = $("#a3").siblings("#a1"); // #1は#3から見て2つ隣
   console.log(target.attr("id"), target.size()); // a1 1
});
</script>
</head>
<body>
    <div id="d" style="padding: 25px; border:1px solid black; width:100px; height:150px;">
        <div id="c" style="padding: 25px; border:1px solid black; width:50px; height:100px;">
            <div id="b" style="padding: 10px; border:1px solid black; width:25px; height:75px;">
                <span id="a1">
                a1
                </span>
                <span id="a2">
                a2
                </span>
                <span id="a3">
                a3
                </span>
            </div>
        </div>
    </div>
</body>
</html>