jQueryでソート機能を作るには、何かのリストが沢山ある必要がある。
なにのリストにしようか……..ネジメーカーにしようか!
山手線の連結部分は、沢山のネジで止めてあるからこれ全部取ったら、後ろの車両との連結ができなくなっちゃうのかな…とか考えながら、通勤しているくらいネジに興味津々です。
さて、ネジメーカーのリストを作り、上部にソートボタンを置いてソートできるようにしてみようと思います。
ネジメーカーリスト
- カタカナのメーカー
- 漢字のメーカー
- 名前が〇〇工業
- 名前が〇〇製作所
- ソートをリセットする
リストがなくなりました
- イワタボルト
- 葵精螺製作所
- 浅川製作所
- 浅善鉄工所
- アルプス精工
- イズラシ
- 磯貝鋲螺工業
- イチヤナギ
- 大川精螺工業
- 大川螺子製作所
- 興津螺旋
- 片山鋲螺工業
- 桂川精螺製作所
- 加藤螺子製作所
- 河坂製作所
- 共和工業所
- クラウン精密工業
- 互省製作所
- 佐賀鉄工所
- サトーラシ
- サンノハシ
- 第一工業
- 千葉精螺
- 東京ネジ製作所
- ナテック
- 日東螺子工業
- 伯楽製鋲所
- ハマノ
- 平戸製作所
- 富士セイラ
- 降矢技研
- ボルトワン
- 守製鋲
このソート機能は、jQueryのテキストを比較する「.match()」と「:contains()」を使用しています。
カタカナと漢字の判定には正規表現を利用して「.match()」で比較する。
キーワード判定は「:contains()」で比較する。
それをリストの数分「each」で回します。
では、実際にコードを見てみましょう!
<div class="demo1"> <p>ネジメーカーリスト</p> <ul class="sort"> <li class="kana">カタカナのメーカー</li> <li class="kanzi">漢字のメーカー</li> <li class="kougyo">名前が〇〇工業</li> <li class="seisaku">名前が〇〇製作所</li> <li class="reset">ソートをリセットする</li> </ul> <div class="list"> <div class="list__notxt">リストがなくなりました</div> <ul> <li>イワタボルト</li> <li>葵精螺製作所</li> <li>浅川製作所</li> <li>浅善鉄工所</li> <li>アルプス精工</li> // リスト数が多いので割愛します。 </ul> </div> </div>
.demo1 {
border: 1px solid #bfbfbf;
border-radius: 12px;
text-align: center;
margin: 30px 0;
padding-top: 4%;
font-size: 30px;
}
.demo1 > p {
font-size: 24px;
font-weight: bold;
}
.sort {
padding: 0;
width: 94%;
margin: 3% auto 20px;
letter-spacing: -.4em;
font-size: 0;
}
.sort li {
display: inline-block;
font-size: 14px;
padding: 2px 12px;
margin: 0 2% 12px 0 !important;
border: 1px solid #00c6b9;
color: #00c6b9;
border-radius: 6px;
cursor: pointer;
transition: .4s;
}
.sort li:last-child {
border: 1px solid #ed8000;
color: #ed8000;
}
.sort li:hover {
opacity: .6;
}
.list {
position: relative;
}
.list__notxt {
display: block;
padding: 0 0 20px;
display: none;
}
.list ul {
letter-spacing: -.4em;
font-size: 0;
padding: 0;
width: 94%;
margin: 0 auto 60px;
text-align: left;
}
.list li {
letter-spacing: normal;
font-size: 15px;
text-align: center;
display: inline-block;
width: 33.3334%;
min-width: 136px;
padding: 13px 4px;
border: 1px solid #bfbfbf;
margin: -1px !important;
vertical-align: top;
}
@media(max-width: 768px) {
.list ul {
text-align: center;
}
}
// カタカナのメーカー
$(".kana").on("click", function() {
// リストの数だけ処理を繰り返す
$(".list li").each(function() {
// 正規表現でリストの中身が「カタカナ」だったらを比較
if($(this).text().match(/^[\u30a0-\u30ff]+$/)) {
$(this).show();
}else{
$(this).hide();
}
});
list();
});
// 漢字のメーカー
$(".kanzi").on("click", function() {
$(".list li").each(function() {
// こちらはほぼ「.kana」の時の比較と一緒だが、否定形の「!」マークがあるので
// リストの中身が「カタカナ」じゃなかったらを比較
if(!$(this).text().match(/^[\u30a0-\u30ff]+$/)) {
$(this).show();
}else{
$(this).hide();
}
});
list();
});
// 名前が〇〇工業
$(".kougyo").on("click", function() {
$(".list li").each(function() {
// 「:contains」の中身のテキストが含まれているかを比較できる。
// 変数も入れられるから、「each」の数字を取得して配列を比較したり複雑なことができる。
if($(this).is(":contains('工業')")) {
$(this).show();
}else{
$(this).hide();
}
});
list();
});
// 名前が〇〇製作所
$(".seisaku").on("click", function() {
$(".list li").each(function() {
if($(this).is(":contains('製作所')")) {
$(this).show();
}else{
$(this).hide();
}
});
list();
});
// ソートをリセットする
$(".reset").on("click", function() {
$(".list li").show();
});
// この「list()」は、表示項目が無かったら、「.list__notxt」のテキスト「リストがなくなりました」を表示する為のもの。
// 今回はリストがなくなるソート機能は付けていなかったので、必要なかったです(;_;)。。。
function list() {
if($('.list').height() == 0) {
$(".list__notxt").show();
$(".list ul").hide();
} else {
$(".list__notxt").hide();
$(".list ul").show();
}
}







コメント