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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

1051閲覧

Javascriptによるテキストの変更について

_TM

総合スコア173

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/01/22 02:51

編集2019/01/22 03:27

はじめまして。

現在、JavaScriptを使用して、UserScriptを作成したいと考えています。
その中で、あるhtmlのDOMのテキストを変更したいと考えていますが上手く行かないです。
解決策をご教授いただけないでしょうか。

前提・実現したいこと

実現したいこと(大枠):ドロップダウンメニューに項目を追加したい
(現在hoge1, hoge2→ hoge1, hoge2, hoge3にしたい)
考えたこと:まず、既存のドロップダウンメニューのhoge1をコピーし、その後、そのDOMの内容を変更(hoge1→hoge3)し、追加する。

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

既存のページから下記のコードを実行しhoge1を取得しました。

JavaScript

1whole_hoge = document.getElementsByClassName("dropdown-menu")[1]; 2hoge1 = whole_hoge.getElementsByTagName("li")[0]; 3clone_hoge1 = hoge1.cloneNode(true);

clone_hoge1として取得した内容が下記になります。

html

1<li> 2 <a href="hoge"> 3 <span class="hoge" aria-hidden="true"></span> 4 hoge1 5 </a> 6</li>

やりたい形はこうです。

html

1<li> 2 <a href="hoge"> 3 <span class="hoge" aria-hidden="true"></span> 4 hoge3<!--とりあえず、ここの文言のみを変更したい。--> 5 </a> 6</li>

やったこと

JavaScript

1clone_hoge1 .innertText = "hoge3";

結果(失敗)

html

1<li> 2 hoge3 <!-- hoge3のみになってしまっている --> 3</li>

補足情報

初学者のため、(言い訳ですが・・・)質問文の中で単語の意味を間違って使っていたり、構文がおかしかったりしていると思います。ごめんなさい。

欲しい情報等ありましたら、別途質問していただけますでしょうか。よろしくお願いしますm(_ _)m

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

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

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

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

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

dice142

2019/01/22 02:53

JSのhoge.innerTextのhogeとはどう宣言したものでしょうか?
_TM

2019/01/22 03:01

すみません。自分の質問の仕方が悪すぎました。 質問内容を修正させていただきます。ごめんなさい。。。
guest

回答4

0

タグ追加無しが条件であれば、以下のように出来ます。

javascript

1 var whole_hoge = document.getElementsByClassName("dropdown-menu")[1]; 2 var hoge1 = whole_hoge.getElementsByTagName("li")[0]; 3 hoge1.querySelector('span.hoge').nextSibling.textContent = 'hoge3';

対象要素を取得する場合、getElementsByClassNameより、querySelectorを使った方が今風かと。

投稿2019/01/22 04:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

_TM

2019/01/22 05:56

なるほど、querySelectorですか。確かにすっきり書けそうに思います。 帰ったらリファクタリングしてみようと思います。ご教授ありがとうございました!m(_ _)m
guest

0

このあたりの解説が詳しいですが、私ならHTMLのほうでSPAN要素でくくってしまうと思います。

【二章第三回 基本的な操作とテキストノード — JavaScript初級者から中級者になろう — uhyohyo.net】
https://uhyohyo.net/javascript/2_3.html

投稿2019/01/22 03:01

kei344

総合スコア69407

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

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

_TM

2019/01/22 03:50

回答ありがとうございます! 参考サイトも併せて確認させていただきます><
guest

0

<span>の中に入れましょう

<span class="hoge">hogehoge</span>

投稿2019/01/22 02:56

kasa0

総合スコア578

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

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

_TM

2019/01/22 02:59

回答ありがとうございます! すみません。自分の質問の仕方が悪すぎたので、質問内容を修正させていただきます。ちょっとお待ちいただけますか・・・><
guest

0

ベストアンサー

取得している要素は<li>タグの要素なので、
そのままinnerTextを書き換えるとそうなります。

本来書き換えたい要素は<a>タグの要素なので、
取得した要素のさらに子要素を取得する必要があります。

例えば下記のような感じです。

js

1var whole_hoge = document.getElementsByClassName("dropdown-menu")[1]; 2var hoge1 = whole_hoge.getElementsByTagName("li")[0]; 3var clone_hoge1 = hoge1.cloneNode(true); 4clone_hoge1.firstElementChild.innerText = "hoge3"; // ★ここ! 5whole_hoge.appendChild(clone_hoge1);

実際に動くサンプル
ボタンで追加するようにしたやつ

投稿2019/01/22 04:57

編集2019/01/22 05:15
runny_nose

総合スコア280

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

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

_TM

2019/01/22 05:53

サンプルまですみません><帰ったらさっそく試してみます。firstElementChildなんてものもあるのですね。勉強になりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問