質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

820閲覧

Javascript 文字判別してリストを削除したい

dboy

総合スコア3

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2022/01/04 04:37

編集2022/01/04 04:49

特定の文字が含まれた時だけ、リスト行を消したいと思っています
結果として

カテゴリー1
カテゴリー3
カテゴリー5

と表示させたいです

単純に2番目と4番目の行を消すのではなく、カテゴリー2、カテゴリー4
という文字がある場合のみです

色々調べながら下記のように記述しました

HTML

1<nav class="breadcrumb"> 2 <ol class="breadcrumb__list"> 3 <li class="breadcrumb__listItem"><a href="">カテゴリー1</a></li> 4 <li class="breadcrumb__listItem"><a href="">カテゴリー2</a></li> 5 <li class="breadcrumb__listItem"><a href="">カテゴリー3</a></li> 6 <li class="breadcrumb__listItem"><a href="">カテゴリー4</a></li> 7 <li class="breadcrumb__listItem">カテゴリー5</li> 8 </ol> 9</nav>

Javascript

1<script type="text/javascript"> 2const pan = document.getElementsByClassName('breadcrumb__listItem'); 3let string2="カテゴリー2"; 4let string4="カテゴリー4"; 5 6if(pan.includes(string2)){ 7pan[1].remove(); 8} 9 10if(pan.includes(string4)){ 11pan[2].remove(); 12} 13</script>
Uncaught TypeError: pan.includes is not a function

こちらを参考にしました
https://www.wakuwakubank.com/posts/485-javascript-include-array-string/

よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/01/04 04:42

includes() はどこで見つけたものですか? URLなど質問本文に追記してください。
dboy

2022/01/04 04:50

ありがとうございます 参考URLを追加しました
guest

回答1

0

ベストアンサー

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 const list=["カテゴリー2","カテゴリー4"]; 4 [...document.querySelectorAll('.breadcrumb__listItem')].forEach(x=>{ 5 if(list.includes(x.textContent)) x.remove(); 6 }); 7}); 8</script> 9<nav class="breadcrumb"> 10 <ol class="breadcrumb__list"> 11 <li class="breadcrumb__listItem"><a href="">カテゴリー1</a></li> 12 <li class="breadcrumb__listItem"><a href="">カテゴリー2</a></li> 13 <li class="breadcrumb__listItem"><a href="">カテゴリー3</a></li> 14 <li class="breadcrumb__listItem">カテ<a href="">ゴリ</a>4</li> <!--これもヒットさせる--> 15 <li class="breadcrumb__listItem">カテゴリー5</li> 16 </ol> 17</nav>

古い書き方

javascript

1window.addEventListener('DOMContentLoaded', function(){ 2 const list=["カテゴリー2","カテゴリー4"]; 3 [].forEach.call(document.querySelectorAll('.breadcrumb__listItem'),function(x){ 4 if(list.indexOf(x.textContent)>-1) x.parentNode.removeChild(x); 5 }); 6});

指定文字を含むものを削除

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 const list=["カテゴリー2","カテゴリー4"]; 4 [...document.querySelectorAll('.breadcrumb__listItem')].forEach(x=>{ 5 if(new RegExp(list.join('|')).test(x.textContent)) x.remove(); 6 }); 7}); 8</script> 9<nav class="breadcrumb"> 10<ol class="breadcrumb__list"> 11<li class="breadcrumb__listItem"> 12<a href="">カテゴリー1</a> 13</li> 14<li class="breadcrumb__listItem"> 15<a href="">カテゴリー2</a> 16</li> 17<li class="breadcrumb__listItem"> 18<a href="">カテゴリー3</a> 19</li> 20<li class="breadcrumb__listItem"> 21<a href="">カテゴリー4</a> 22</li> 23<li class="breadcrumb__listItem">カテゴリー5</li> 24</ol> 25</nav>

投稿2022/01/04 04:42

編集2022/01/04 09:22
yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dboy

2022/01/04 07:22

ご回答ありがとうございます。 通常のブラウザでは動作したのですが、実は現在フューチャーショップというECサイトサービスを使用しており、動作がしませんでした ...のスプレッド構文というものがES2018で、おそらく対応していないものと思われます。 スプレット構文というものを初めて見たので、できれば古い書き方で書いて頂くことは可能でしょうか。 まだ本を読んで序盤の知識のため、長くても略式でない方が勉強になり助かります。
yambejp

2022/01/04 07:36

「フューチャーショップ」というサイトの仕様がよくわかりませんが いちおうIE11でも動作するような書き方を追記しておきました
dboy

2022/01/04 08:57

古い書き方のご回答もいただき、ありがとうございます。 ブラウザ上で動作確認できましたので、試してみたいと思います。
dboy

2022/01/04 09:15

システム上なぜ上手くいかないか理由が少しわかりました リストを書き出されてた際に <li class="breadcrumb__listItem"> <a href="">カテゴリー2</a> </li> と改行されておりました <li class="breadcrumb__listItem"> <a href="">カテゴリー2</a> </li> と <li class="breadcrumb__listItem"><a href="">カテゴリー2</a></li> では取得や判別方法が違うのでしょうか
yambejp

2022/01/04 09:17

改行している場合は改行マークを含める文字になりますので \nカテゴリー2\nとの比較になってしまうでしょうね 改行は無視するもしくは「カテゴリー2」文字が含まれるという条件設定になると思います
dboy

2022/01/04 09:23

const list=["\nカテゴリー2\n","\nカテゴリー4\n"]; と記述すればよろしいでしょうか
dboy

2022/01/04 09:29

<a>タグで挟まれているので、カテゴリー2\nでは少し違うのかなと思いました
yambejp

2022/01/04 09:38

breadcrumb__listItemクラスのtextContentはaタグの前後の改行マークを含めたものになるので微妙です。追記した方法でやるのが妥当では? ただしカテゴリー21とかにもヒットしてしまうのでそれが嫌ならaタグ内で改行がないならaタグを指定してtextContentを抜き出す手もありますね
dboy

2022/01/05 00:14

ありがとうございます。 無事に成功しました。 const list=["\nカテゴリー2\n","\nカテゴリー4\n"]; としてみました 書き出されたHTMLが左詰で <li class="breadcrumb__listItem"> <a href="">カテゴリー1</a> </li> となっていたのが良かったのかもしれません 試しにaタグの前にTABやスペースなどを入れたところ非表示にはなりませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問