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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

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

Q&A

解決済

4回答

1236閲覧

JavaScriptのindexOfで文字列があるのに「-1」が返ってくる

greentail

総合スコア15

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

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

0グッド

0クリップ

投稿2022/04/21 06:02

WordPress5.9の投稿編集画面で文字列検索をしたく

JavaScript

1function my_admin_script() { 2 echo '<script> 3 window.onload = function(){ 4 var customSource = document.getElementById("content"); 5 console.log(customSource); 6 console.log(String(customSource).indexOf("Point")); 7} 8 </script>'.PHP_EOL; 9} 10add_action('admin_print_scripts', 'my_admin_script');

をfunction.phpに記述しています。
投稿編集画面で下書き保存後、
console.logで出力した通り、customSourceに"Point"という文字列が含まれているのに
console.log(String(customSource).indexOf("Point"));
の結果は「-1」となってしまいます。

問題の原因を探すため
indexOf("Point")をindexOf("content")
などに書き換えても結果が同じで、indexOf("Point")の"Point"に投稿画面の文字列をコピー&ペーストしても結果は同じで困っています。
初心者で変なことをしているのかも知れませんが、解決方法などご教示お願いします。

GoogleChromeDevTool
GoogleChromeDevTool

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

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

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

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

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

yambejp

2022/04/21 06:10

my_admin_script()はPHPのスクリプトという認識ですか?
greentail

2022/04/21 06:16

最初管理画面でJavaScriptが使えなかったので https://memocarilog.info/wordpress/7570 こちらのサイト「管理画面に独自の CSS・JavaScript を適用させる方法まとめ」を参考に function.phpに記述しました。
guest

回答4

0

console.log(document.getElementById("content").toString())などとしてみると、原因がわかると思います。innerHTMLなどを使用するのがいいかと思いますよ。

投稿2022/04/21 06:14

Lhankor_Mhy

総合スコア36102

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

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

greentail

2022/04/21 06:30

ありがとうございます。 console.log(customSource.innerHTML.indexOf("Point"));で開始位置が取れました。
guest

0

textarea内の文字列がとりたいのか、textareaのタグも含めて文字列としたいのかわからないのですが、
Document.getElementById() id プロパティが指定された文字列に一致する要素を表す Element オブジェクトを返すのでString()したところで、[object HTMLTextAreaElement]のようになるだけで文字列にはなりません。

「textarea内の文字列」ならvalueプロパティを参照してください。

JavaScript

1customSource.value

投稿2022/04/21 06:14

m.ts10806

総合スコア80850

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

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

greentail

2022/04/21 06:24

textarea内の文字列が必要でした。 ご教示頂きましたように console.log(customSource.value.indexOf("Point")); としたところ無事4が返ってきました。 ありがとうございました。
m.ts10806

2022/04/21 06:28

解決されたようで何よりです。 質問が受付中になっているので締めておいてください。 ※あと質問は編集できますので、指摘あれば都度修正を
greentail

2022/04/21 09:33

いろいろありがとうございます。 2度目の返信遅れてすみません。
guest

0

解決していますが、今後のためのアドバイスとしては、

JavaScriptのindexOfで文字列があるのに「-1」が返ってくる

というのは考える方向性を間違っています。

console.logで出力した通り、customSourceに"Point"という文字列が含まれているのにconsole.log(String(customSource).indexOf("Point"));の結果は「-1」となってしまいます。

結果が-1なのが確かであれば、String(customSource)"Point"が含まれていないと言うのが同じだけ確かです。
なので、console.log(String(customSource))してみようという方向に行くのが正しい。

一般化すると、間違えた場合は一歩ずつ確認します。
customSourceからString(customSource).indexOf("Point")にいきなり行かない)

投稿2022/04/21 07:56

otn

総合スコア84533

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

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

greentail

2022/04/21 10:09

なるほど、Stringをつけたのもその場しのぎでいろいろ間違っていました。 ありがとうございます!
otn

2022/04/21 13:00

> Stringをつけたのもその場しのぎ 知らないことを間違うこと自体は問題ないです。上級者でも知らないこと(忘れたこと)を間違うのは普通です。 結果がおかしい時に、どう動くかで初心者とそれ以上に別れます。
greentail

2022/04/22 00:07

ありがとうございます、頑張ります。
guest

0

ベストアンサー

console.log(String(customSource).indexOf("Point"));

ちょっと何をしたいかわかりません
DOMをstringに無理やりしている?

String(customSource)は[object HTMLTextAreaElement]とか返ってきてませんか?

javascript

1 console.log(customSource.innerHTML.indexOf("Point"));

とか?

投稿2022/04/21 06:14

yambejp

総合スコア114825

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

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

greentail

2022/04/21 06:29

最初Stringなしで実行してみたところ "TypeError: obj.indexOf is not a function"エラー が出たためエラー文で検索し行きついた先で解決方法として紹介されていたのでつけました。 基本がわかっていなくてすみません・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問