scythercas
@scythercas

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

.innerTextを一回ですませたい

素数判定をしてくれるプログラムです。
以下のコードで理想通り動作はしてくれるのですが、resultText.innerText.innerTextを省略できないか試行錯誤していて、以下の2つがその作業中に出た質問です。

質問

  • 元々はlet resultText = document.getElementById("result").innerTextとして、resultText = "素数です"のように書いていたのですが、実行しても判定します部分が変わってくれません。原因は何でしょうか。なお、特にエラーは発生しませんでした。
  • .innerText部分をどうにか省略できないでしょうか。

わかりづらい質問文ですみません。片方だけでも良いのでどなたかご教授ください。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>素数判定</title>
</head>
<h1>素数判定</h1>
<input id="num" placeholder="自然数を入力">
<button id="submit">決定</button>
<div id="result">判定します</div>
<script>
const judge=()=>{
    let n = document.getElementById("num").value;
    let resultText = document.getElementById("result");
    if(n==2 || n==3){
        console.log(n);
        resultText.innerText = "素数です";
    }else{
        for(let i=2;i<=Math.sqrt(n);i++){
            if(n%i==0){
                console.log(i);
                resultText.innerText = "素数です";
            }
        }
        resultText.innerText = "素数ではありません";
    }
};
document.getElementById("submit").addEventListener("click",judge,false);
</script>
</html>

0

1Answer

元々はlet resultText = document.getElementById("result").innerTextとして、resultText = "素数です"のように書いていたのですが、実行しても判定します部分が変わってくれません。原因は何でしょうか。なお、特にエラーは発生しませんでした。

この記述だと変数resultText文字列 が代入されるだけで、resultText = hogeと記述しても変数の中の文字列が更新されるだけで画面に表示される要素は更新されません。

resultText = document.getElementById("result");とすると 画面要素 がresultTextに代入されているので、resultText.innerText = hogeとすると画面に表示されている要素が更新されます。

innerTextを何度も書くのが面倒なのであれば結果用の文字列を変数として用意して、最後にinnerTextに代入して表示されている要素を更新するのはいかがでしょうか?

See the Pen Untitled by yotty (@yotty) on CodePen.

※2と3以外は素数ではないと表示されてしまっているようだったので、素数判定部分も少し修正しています。

2Like

Comments

  1. @scythercas

    Questioner

    @YottyPG さん、ご回答ありがとうございます!
    > この記述だと変数resultTextに 文字列 が代入されるだけで、resultText = hogeと記述しても変数の中の文字列が更新されるだけで画面に表示される要素は更新されません。
    言われてみればそうでした。

    > innerTextを何度も書くのが面倒なのであれば結果用の文字列を変数として用意して、最後にinnerTextに代入して表示されている要素を更新するのはいかがでしょうか?

    そうします、ありがとうございます!

    コードを拝見してまた質問が生まれてしまったのですが、
    ```
    if(JudgePrimeNumber(n)){
    resultText = "素数です";
    }
    else{
    resultText = "素数ではありません";
    }
    ```
    この部分の、if()内は`==true`が省略されたものという認識で間違いないですか?
  2. すみません、回答したあともちょこちょこ内容修正しちゃってます。
    関数名は「IsPrimeNumber」に変更しました。

    >この部分の、if()内は`==true`が省略されたものという認識で間違いないですか?

    関数「IsPrimeNumber」自体がtrue or falseのbool値を返すので、`==true`が必要ないという感じです。
    if文はかっこの中の結果がtrueかfalseかで分岐するだけで、つねに`==true`というような比較演算子が必要というわけではないです。
  3. @scythercas

    Questioner

    なるほど、勉強になります!!
    以前から何度も回答頂き本当にありがとうございます。精進します

Your answer might help someone💌