teratail header banner
teratail header banner
質問するログイン新規登録
jQuery

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

Q&A

解決済

2回答

773閲覧

jQuery 置き換え

退会済みユーザー

退会済みユーザー

総合スコア0

jQuery

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

0グッド

0クリップ

投稿2022/06/01 01:54

編集2022/06/14 03:10

0

0

現在jsで作った電卓をjQueryに置き換えるのをやっているのですが、jQueryを習って間もないため全然わからず困っています。
下記に記載した通りjQueryへの書き換えを少しやってみたのですが、値は取れているものの、数字を押してもディスプレイに表示されるのは今押したもののみで、計算もされません。
また×や÷を*や/にして計算する処理も反映されていません。
=を押した時もReferenceError: replaceAll is not definedが出てしまいます。
回答者の方々に指摘されたところを直してみたのですが、うまくいかず、元に戻したのが下記のjQueryです。

jqueryをどう修正すれば電卓ができるようになるのかアドバイスいただきたいです。

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

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

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

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

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

m.ts10806

2022/06/01 02:05

元がどうなっていてどういう仕様で やってみた結果どういう問題が起きてるのか具体的に記載してください。 htmlも一部だと再現できませんし、 jQuery離れが進んでいる昨今で今からあえてjQueryに足を踏み入れるメリットは少ないのではと。
退会済みユーザー

退会済みユーザー

2022/06/01 02:06

「現在jsで作った電卓」というのはどういうものですか? 自分で作ったのであれば、聞かなくても分かる知識はあるはずと思うのですが。
yambejp

2022/06/01 02:11 編集

わざわざjsをjQueryに変更する意味はあまりありませんが・・・ もとのjsを提示ください ボタンの配置もよくわからないのでcssも追記しておいてください
Lhankor_Mhy

2022/06/01 02:20

『下記のコードをJQueryバージョンにして』とのことですが、「JQueryバージョンにして」というのは、どういう意味ですか? jQueryに書き換える、という意味でしたら、「下記のコード」はjQueryで書かれているように見えます。
退会済みユーザー

退会済みユーザー

2022/06/01 02:29

すみません、修正いたします。
退会済みユーザー

退会済みユーザー

2022/06/01 02:45

「現在jsで作った電卓」を追記したようですが、それは期待通り動くのでしょうか? 提示されたコードを見る限りそうは見えないのですが・・・
退会済みユーザー

退会済みユーザー

2022/06/01 02:57 編集

すみません、jsの時のCSSとHTMLも少しjqueryバージョンに書き換えてしまったので、動かないのかと思われます。 HTMLの <div id="display" value="0">0</div> の下 <div class="comm">がjsだと <div class="commands">となっており、 CSSもcommでとってしまってるのを記載しているので、そこも変わります。 またHTMLで <div class="commands"> の下のdivから全てonclick="calc_func(this)"をjsでは入れていました。
m.ts10806

2022/06/01 06:25

細かいですが「jqueryバージョン」という呼び方をやめられたほうが良いです。混乱の元です。 「jQueryの書き方」とかでしょうか。
guest

回答2

0

ベストアンサー

見つけたものを追記していきます。


.htmlはメソッドです。意図がわからないので何とも言い難いですが、たぶん代入はしない方がいいでしょう。

js

1$('#display').html = (new Function("return " + replace_value))();

.html() | jQuery API Documentation


$('÷', '/')ですが、$()にはいくつかのパターンがありますが、文字列の引数を二つ受けるのはこの構文かと思います。
jQuery( selector [, context ] )
この場合、コンテキストのセレクタとして扱われますので、/が有効なセレクタではないということかと思います。
コードの意図がわからないので何とも言えないですが、セレクタの構文に従うのがいいかと思います。


$('÷', '/').replaceAll('×', '*')ですが、replaceAllメソッドは引数が一つです。

.replaceAll() | jQuery API Documentation


new Function("return " + replace_value)()ですが、

js

1 $('#display').text(button_value); 2//... 3 } else if (button_value === "=") { 4 //let replace_value = $('#display').text($('÷', '/').replaceAll('×','*')); 5 let replace_value = $('#display').text(); // ↑は←だとすると、

となっていますので、replace_valueは必ず"="となるため、(function(){return =})()と等価で文法エラーです。


$('#display') += button_valueですが、jQueryオブジェクトに文字列を加算代入してもいいことはなさそうです


display += button_value;ですが、letで宣言されており、その後の参照がなさそうなのでイベント処理が終わってそのまま捨てられてそうです。DOMに反映した方がいいのでは。


let display = $('#display').val();としたり$('#display').html("0")としたり、テキストノードと属性のどちらでデータを扱っているのか統一されていないように思います。


<div id="display" value="0">0</div>ですが、divvalueという属性は使えないので、data-*属性に変えるか、要素を変えるかした方がいいと思います。

data-* - HTML: HyperText Markup Language | MDN


質問の変更に合わせて追記

display.html(replaceAll("×", "*").replaceAll("÷", "/"))ですが、replaceAllは文字列のメソッドです。また、同名のメソッドがjQueryにもありますので、混同しているのでは?
String.prototype.replaceAll() - JavaScript | MDN


display.text() += button_valueですが、text()の戻り値は文字列なので、代入できません。代入式の左辺に来ることができるのは、変数などです。

Returns: String
.text() | jQuery API Documentation

text()で中身のテキストを変更したい場合は、引数を渡して呼び出す必要があります。

Set the content of each element in the set of matched elements to the specified text.
.text() | jQuery API Documentation

投稿2022/06/01 03:08

編集2022/06/06 08:27
Lhankor_Mhy

総合スコア37481

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

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

退会済みユーザー

退会済みユーザー

2022/06/01 03:13

全然気づきませんでした汗 直します!
退会済みユーザー

退会済みユーザー

2022/06/01 03:27

$('#display').text($('÷', '/').replaceAll('×','*')); についてなのですが、下記のリンクのやり方でやってみたら、それについてはエラーは出ないのですが、=を押すと SyntaxError: Unexpected identifier at new Function (<anonymous>) at HTMLDivElement. が出ます汗 意味を調べたのですが、よくわからなかったです汗 https://sigt.jp/blog/jquery-replace-multiple/
Lhankor_Mhy

2022/06/01 03:46

具体的なコードがないと何とも言えないですが、エラーメッセージは文法エラーなので、おそらく引用符の閉じ忘れとかその辺かな、と想像してます。
退会済みユーザー

退会済みユーザー

2022/06/01 04:08

下記のようにうやってみました! let replace_value = $('.command is-operator').each(function(){ let txt = $(this).html(); $(this).html( txt.replace(/÷/g,'/').replace(/×/g,'*') ); });
Lhankor_Mhy

2022/06/01 04:10

4番目に指摘済みの件かもしれないですね。
退会済みユーザー

退会済みユーザー

2022/06/01 05:32

ありがとうございます! 修正してみます!
退会済みユーザー

退会済みユーザー

2022/06/03 01:38

すみません、あれから書き直してみたのですが、同じエラーが出続け、コードもごちゃごちゃになってしまいわけわからなくなってしまいました。 参考にできるようなソースコードを送っていただくことはできないでしょうか?
Lhankor_Mhy

2022/06/03 01:57

「参考にできるようなソースコード」のイメージが付かないです。 電卓が動作しているコードは、お手元にあるのですよね? それが一番参考になりそうな気がします。 とりあえず、あれこれ手を付けずにひとつひとつエラーを潰していってはいかがでしょうか。
退会済みユーザー

退会済みユーザー

2022/06/03 04:33

何から何までありがとうございます! この参考サイトを元に書き換えてみます!
退会済みユーザー

退会済みユーザー

2022/06/03 08:02

すみません、この参考サイトを丸コピしたのですが、-3 + 3をすると6と出たり、-3 - -3は-3 と出てきてしまいます汗
Lhankor_Mhy

2022/06/04 00:24

世の中にある一般的な電卓は、減算の「-」と符号の「-」は別のキーを割り当ててますよ。
退会済みユーザー

退会済みユーザー

2022/06/05 03:51

そうですよね、別でそれ用のボタンを追加してみます!
退会済みユーザー

退会済みユーザー

2022/06/06 09:07

追記ありがとうございます! 理解が乏しく、せっかく細かくご丁寧にご指摘してくださったのに、うまく組み込むことができずすみません汗 追記していただいたものをちゃんと調べて組み込んでみます!
退会済みユーザー

退会済みユーザー

2022/06/08 13:57

無事できました! ありがとうございました!!!
Lhankor_Mhy

2022/06/08 14:51

お役に立てたようで何よりです
guest

0

divにvalue属性を設定するのはNGですdata-valueなどカスタムデータにしてください

投稿2022/06/01 04:05

yambejp

総合スコア117902

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

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

退会済みユーザー

退会済みユーザー

2022/06/01 05:32

ありがとうございます! 修正します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問