mapとは
- ここで説明する map とは次の語句からなるjQueryのメソッドです。
- map
- 読み: マップ
意味: 地図、位置づけ
mapメソッドの概要
このメソッドは、呼び出し元の要素群の各要素にコールバック関数を使ってフィルタリングします。
この手法はコールバック関数の戻り値が新しい要素群として利用できるため、複雑な条件処理を作ることで非常に柔軟な要素群を取得することができます。
構文
サンプルを見る前に構文を確認しておきます。
- index: 要素のインデックス番号です。0 から始まります。
- domElement: 要素そのものをElementオブジェクトにしたものです。
var mapElement = $(Selector).map(callback(index, domElement))
サンプルコードと実行結果
ここでは、div 要素群を題材にします。
map() の呼び出し元は div 要素群です。この要素群から コールバック関数を使って if条件に一致するものだけを取り出して背景色を設定します。 if条件には match() を使用して要素のテキストに シングルクォーテーションで挟まれた文字列があるかを判定しています。
サンプルコード: CSS
<style>
div{
border: thin solid currentColor;
margin: 0.5em 0 0.5em 0;
padding: 0.5em;
}
</style>
サンプルコード: HTML
<head>
<style>...</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<div>Element DIV</div>
<div>Element 'DIV'</div>
<div>Element "DIV"</div>
<button id="idButton">Click</button>
<script>...</script>
</body>
- 06, 07, 08: div (ブロックコンテナー要素です。この要素らを取得して、 map() でフィルタリングします。)
- 09: button (ボタンです。クリックすると script 07 ~ 09 のコードが実行されます。)
サンプルコード: script
<script>
function myFuncMap(index, domElement){
if($(domElement).text().match(/'.*'/g) != null){
return domElement;
}
}
$("#idButton").click(function(){
$("div").map(myFuncMap).css("background-color", "##lightpink");
});
</script>
- 02-06: function (map() メソッドに利用するために myFuncMap の名前でコールバック関数を作成します。)
- 03: match() (match() メソッドでテキストのパターンマッチングを行います。)
- 07-09: $("#idButton").click(function(){処理}) (id="idButton" の要素がクリックされると 処理 を実行します。)
- 08: $("div").map(myFuncMap) (div 要素群を map(callback) を使ってフィルタリングします。)
以下のコードは記述方法が違うだけで、同じ処理を行っていますので、説明は割愛させていただきます。
<script>
$("#idButton").click(function(){
$("div").map((index, domElement) => {
if($(domElement).text().match(/'.*'/g) != null){
return domElement;
}
}).css("background-color", "##lightpink");
});
</script>
Element DIV
Element 'DIV'
Element "DIV"