'.PHP_EOL;\n}\nadd_action('admin_print_scripts', 'my_admin_script');\n```\nをfunction.phpに記述しています。\n投稿編集画面で下書き保存後、\nconsole.logで出力した通り、customSourceに\"Point\"という文字列が含まれているのに\nconsole.log(String(customSource).indexOf(\"Point\"));\nの結果は「-1」となってしまいます。\n\n問題の原因を探すため\nindexOf(\"Point\")をindexOf(\"content\")\nなどに書き換えても結果が同じで、indexOf(\"Point\")の\"Point\"に投稿画面の文字列をコピー&ペーストしても結果は同じで困っています。\n初心者で変なことをしているのかも知れませんが、解決方法などご教示お願いします。\n\n\nGoogleChromeDevTool\n\n\n\n\n","answerCount":4,"upvoteCount":0,"datePublished":"2022-04-21T06:02:24.158Z","dateModified":"2022-04-22T09:07:44.000Z","acceptedAnswer":{"@type":"Answer","text":" \n> console.log(String(customSource).indexOf(\"Point\"));\n\nちょっと何をしたいかわかりません\nDOMをstringに無理やりしている?\n\nString(customSource)は[object HTMLTextAreaElement]とか返ってきてませんか?\n\n```javascript\n console.log(customSource.innerHTML.indexOf(\"Point\"));\n```\nとか?","dateModified":"2022-04-21T15:30:33.000Z","datePublished":"2022-04-21T06:14:42.173Z","upvoteCount":2,"url":"https://teratail.com/questions/0mr94fl5sl8gnz#reply-auomslddp6auxf"},"suggestedAnswer":[{"@type":"Answer","text":"解決していますが、今後のためのアドバイスとしては、\n> JavaScriptのindexOfで文字列があるのに「-1」が返ってくる\nというのは考える方向性を間違っています。\n\n> console.logで出力した通り、customSourceに\"Point\"という文字列が含まれているのにconsole.log(String(customSource).indexOf(\"Point\"));の結果は「-1」となってしまいます。\n\n結果が`-1`なのが確かであれば、`String(customSource)`に`\"Point\"`が含まれていないと言うのが同じだけ確かです。\nなので、`console.log(String(customSource))`してみようという方向に行くのが正しい。\n\n一般化すると、間違えた場合は一歩ずつ確認します。\n(`customSource`から`String(customSource).indexOf(\"Point\")`にいきなり行かない)\n","dateModified":"2022-04-21T07:56:59.615Z","datePublished":"2022-04-21T07:56:59.615Z","upvoteCount":2,"url":"https://teratail.com/questions/0mr94fl5sl8gnz#reply-704w0if0zbwdj5","comment":[{"@type":"Comment","text":"なるほど、Stringをつけたのもその場しのぎでいろいろ間違っていました。\nありがとうございます!","datePublished":"2022-04-21T10:09:36.678Z","dateModified":"2022-04-21T10:09:36.678Z"},{"@type":"Comment","text":"> Stringをつけたのもその場しのぎ\n知らないことを間違うこと自体は問題ないです。上級者でも知らないこと(忘れたこと)を間違うのは普通です。\n結果がおかしい時に、どう動くかで初心者とそれ以上に別れます。","datePublished":"2022-04-21T13:00:37.571Z","dateModified":"2022-04-21T13:00:37.571Z"},{"@type":"Comment","text":"ありがとうございます、頑張ります。","datePublished":"2022-04-22T00:07:44.098Z","dateModified":"2022-04-22T00:07:44.098Z"}]},{"@type":"Answer","text":"`console.log(document.getElementById(\"content\").toString())`などとしてみると、原因がわかると思います。innerHTMLなどを使用するのがいいかと思いますよ。","dateModified":"2022-04-21T06:14:44.890Z","datePublished":"2022-04-21T06:14:44.890Z","upvoteCount":3,"url":"https://teratail.com/questions/0mr94fl5sl8gnz#reply-ux3n7m297e19kc","comment":[{"@type":"Comment","text":"ありがとうございます。\nconsole.log(customSource.innerHTML.indexOf(\"Point\"));で開始位置が取れました。","datePublished":"2022-04-21T06:30:27.446Z","dateModified":"2022-04-21T06:30:27.446Z"}]},{"@type":"Answer","text":"textarea内の文字列がとりたいのか、textareaのタグも含めて文字列としたいのかわからないのですが、\n[Document.getElementById()](https://developer.mozilla.org/ja/docs/Web/API/Document/getElementById)は` id プロパティが指定された文字列に一致する要素を表す Element オブジェクト`を返すのでString()したところで、`[object HTMLTextAreaElement]`のようになるだけで文字列にはなりません。\n\n「textarea内の文字列」なら[valueプロパティ](https://developer.mozilla.org/ja/docs/Web/API/HTMLTextAreaElement)を参照してください。\n```JavaScript\ncustomSource.value\n```","dateModified":"2022-04-21T06:14:04.322Z","datePublished":"2022-04-21T06:14:04.322Z","upvoteCount":3,"url":"https://teratail.com/questions/0mr94fl5sl8gnz#reply-929ybvl54fqkj8","comment":[{"@type":"Comment","text":"textarea内の文字列が必要でした。\nご教示頂きましたように\nconsole.log(customSource.value.indexOf(\"Point\"));\nとしたところ無事4が返ってきました。\nありがとうございました。","datePublished":"2022-04-21T06:24:44.947Z","dateModified":"2022-04-21T06:24:44.947Z"},{"@type":"Comment","text":"解決されたようで何よりです。\n質問が受付中になっているので締めておいてください。\n\n※あと質問は編集できますので、指摘あれば都度修正を","datePublished":"2022-04-21T06:28:38.069Z","dateModified":"2022-04-21T06:28:38.069Z"},{"@type":"Comment","text":"いろいろありがとうございます。\n2度目の返信遅れてすみません。","datePublished":"2022-04-21T09:33:06.760Z","dateModified":"2022-04-21T09:33:06.760Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/WordPress","name":"WordPressに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/0mr94fl5sl8gnz","name":"JavaScriptのindexOfで文字列があるのに「-1」が返ってくる"}}]}}}
WordPress5.9の投稿編集画面で文字列検索をしたく
JavaScript
1 function 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 }
10 add_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
console.log(document.getElementById("content").toString())などとしてみると、原因がわかると思います。innerHTMLなどを使用するのがいいかと思いますよ。
textarea内の文字列がとりたいのか、textareaのタグも含めて文字列としたいのかわからないのですが、
Document.getElementById() は id プロパティが指定された文字列に一致する要素を表す Element オブジェクトを返すのでString()したところで、[object HTMLTextAreaElement]のようになるだけで文字列にはなりません。
「textarea内の文字列」ならvalueプロパティ を参照してください。
JavaScript
1 customSource . value
解決していますが、今後のためのアドバイスとしては、
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")にいきなり行かない)
ベストアンサー
console.log(String(customSource).indexOf("Point"));
ちょっと何をしたいかわかりません
DOMをstringに無理やりしている?
String(customSource)は[object HTMLTextAreaElement]とか返ってきてませんか?
javascript
1 console . log ( customSource . innerHTML . indexOf ( "Point" ) ) ;
とか?
15分調べてもわからないことは teratailで質問しよう!
ただいまの回答率 85.29%
質問をまとめることで 思考を整理して素早く解決
テンプレート機能で 簡単に質問をまとめる
質問する