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

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

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

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

727閲覧

clickでtextを交互に表示させたい

Iori

総合スコア55

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2022/10/11 00:56

編集2022/10/13 07:20

前提

クリックすると英語と日本語が交互に表示させるようにしたいです。

実現したいこと

toggle buttonを使って違う要素のテキストを変換させたいです。
イメージ説明

発生している問題・エラーメッセージ

一回クリックすると日本語に変わりその後はクリックしても日本語のままです。

該当のソースコード

html

1 <div class="subtitle-parent col-sm-12 col-md-12 "> 2 <div class="subtitle"> 3 <div class="english"> 4 <p>This is English</p> 5 </div> 6 </div> 7 <div class="side-gadget"> 8 <!-- TOGGLE BUTTON --> 9 <div class="toggle-switch"> 10 <input type="checkbox" id="toggle" class="toggle-input"> 11 <label for="toggle" class="toggle-label"></label> 12 </div> 13 14 <div class="gear"> 15 <i class="fa-solid fa-gear"></i> 16 17 </div> 18 </div> 19 </div> 20

css

1/* 下 */ 2.subtitle-parent { 3 background-color: #fff; 4 display: flex; 5 justify-content: space-between; 6} 7 8 9 10 11 12 13 14 15 16 17 18 19 20/* TOGGLE BUTTON */ 21 22/* ① ボタンの背景は Ckeckboxの<label> */ 23.toggle-label { 24 width: 60px; 25 height: 30px; 26 background: #ccc; 27 position: relative; 28 display: inline-flex; 29 border-radius: 46px; 30 transition: 0.4s; 31 box-sizing: border-box; 32} 33 34input[type='checkbox']:checked+label { 35 background-color: #4BD865; 36} 37 38/* ②Toggle Switch の左右に動く 「 ○ 」 */ 39.toggle-label::after { 40 41 /* // ○ のスタイル */ 42 content: ''; 43 position: absolute; 44 width: 30px; 45 height: 30px; 46 border-radius: 100%; 47 left: 0; 48 top: 0; 49 z-index: 2; 50 background: #fff; 51 box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); 52 transition: 0.4s; 53 cursor: pointer; 54} 55 56input[type='checkbox']:checked+label:after { 57 left: 30px; 58} 59 60input { 61 display: none; 62}

js

1// TOGGLE BUTTON 2 3$('#toggle').click(function() { 4 5if($('.english').text = 'This is English') { 6 $('.english').text('この文は日本語です'); 7 8} else { 9 $('.english').text('This is English'); 10 11} 12 13});

試したこと

こちら https://www.tutorialrepublic.com/codelab.php?topic=faq&file=jquery-changing-text-inside-a-button-or-link-when-toggle
の記事を参考に

js

1 var text = $('.english').text(); 2

を使ってみたりしましたが、これは意味なかったです...

int32_t様の解説が理解できているか不安です

$('.english').text('〜') だと赤丸2つも含まれてしまうということでしょうか?

イメージ説明

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

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

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

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

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

m.ts10806

2022/10/11 01:24

if($('.english').text = 'This is English') { は全く意味不明の実装なので論外として(プロパティとメソッド、代入と演算子の違いが理解できてない) >を使ってみたりしましたが、これは意味なかったです... その後どう使ったのでしょうか。 代入しただけでは何も起きないのは当然と思うのですが。 質問編集してください。
m.ts10806

2022/10/11 01:25

$('.english').text() ←これで何が取得できたかデバッグで確認してみましたか? デバッグで確認することを覚えれば質問する前に解決できることも増えてくると思うのですが。
Iori

2022/10/11 06:07

コメントありがとうございます。 デバッグで「この文は日本語です」と出ました。大変恥ずかしながら、デバッグで確認する考え方を心得ていませんでした。本当に基礎ができていないのでご教示ありがとうございます。
guest

回答2

0

あらかじめ文書はHTMLに埋め込んでおいてcssで切り替えればよいのでは?

css

1<style> 2#toggle:checked ~ * .english{ 3display:none; 4} 5#toggle:not(:checked) ~ * .japanese{ 6display:none; 7} 8</style> 9 10<input type="checkbox" id="toggle" class="toggle-input"> 11<div class="subtitle-parent col-sm-12 col-md-12 "> 12<div class="subtitle"> 13<div class="english"> 14<p>This is English</p> 15</div> 16<div class="japanese"> 17<p>この文は日本語です</p> 18</div> 19</div> 20</div>

投稿2022/10/11 01:04

yambejp

総合スコア114769

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

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

0

ベストアンサー

js

1if($('.english').text = 'This is English') {

text プロパティに代入してしまっていますが、text 関数の呼び出し結果との比較をしたいはずです。

js

1if ($('.english').text() == 'This is English') {

実際は改行や空白が入っていて比較もうまくいかないと思います。対象を $('.english p') にしたほうが良いでしょう。

投稿2022/10/11 01:00

編集2022/10/11 01:06
int32_t

総合スコア20832

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

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

Iori

2022/10/11 10:51

ありがとうございます。ご指示いただいたとおりに変えましたらきれいに作動しました。p を加えないとテキストであることを特定できず、認識されないという考えで合っていますでしょうか?
int32_t

2022/10/11 15:04

> テキストであることを特定できず いいえ。回答に書いたとおり、$('.english').text() では前後に空白が入って 'This is English' にはならないということです。あと、$('.english').text('〜') をすると <p> が消えてしまうので、それも意図通りではないだろうと思います。
Iori

2022/10/13 07:18

解説ありがとうございます。質問の部分で確認させていただきたいことがあるので確認していただいても大丈夫でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問