- ベストアンサー
ページ内で、指定した文字が重複しているとアラート表示
指定した文字が、同じページ内で2つ以上 存在する場合 submitボタンを押すと、”重複しています”などのアラートが表示される …というjavascriptを組みたいのですが、いったいどうしたら良いのか解りません。 どなたか、教えていただけませんでしょうか? javascriptは初心者なので、出来れば詳しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 <div>などでページ全体を挟んでおいて、仮に(id="wrapper")とします。 テキストだけなら、document.getElementById("wrapper").innerTextで全体を文字列として取得できますので、その文字列内を検索すれば良いのではないでしょうか。 例えば「ウサギ」を調べるなら、以下でヒット回数がわかります。 document.getElementById("wrapper").innerText.match(/ウサギ/g).length ただし、ヒットしない場合は(該当語句がない場合)は、検索結果がnullになるので、lengthを取ろうとするとエラーになりますので注意してください。
その他の回答 (3)
細かなエラーは無視しました! マウスでドラッグして、選択した文字を取得して検索します 引っかかった文字を赤くしたいとかは自分でやってね! 「神様」を選ぶと2個! 「実力」を選ぶと1個みたいな!? 試されているようで嫌な思いがします! あっちじゃ笑っているでしょうね~。 <html> <body> <div id="a"> あいうえおかきくけこさしすせそたちつてと<br> あっちには神様とも思える人がいるのにさぁ<br> なんでこっちをえらんだかなぁ~。こっちも<br> まるちは禁止になってるようだよ!しかも<br> 規約に違反するとかで俺の書き込みは消されてるし<br> <p> あいうえおかきくけこさしすせそたちつてと<br> あっちには神様とも思える人がいるのにさぁ<br> なんでこっちをえらんだかなぁ~。こっちも<br> まるちは禁止になってるようだよ!しかも<br> 規約に違反するとかで俺の書き込みは消されてるし<br> 実力は絶対あっちだって! </p> </div> <script> document.body.onmouseup = chk; function chk(){ var key = getSelectText(); if(key=='') return; var text = (/*@cc_on!@*/false)? document.getElementById('a').innerText:document.getElementById('a').textContent; var r = new RegExp(key,'gm'); var n = text.match(r); if(n) alert(n.length+'個使われています'); } function getSelectText(){ return (/*@cc_on!@*/false)?((document.selection.type == 'Text')? document.selection.createRange().text:''):window.getSelection().getRangeAt(0); } </script> </body>
お礼
おお!こういうこともできるんですね…! ありがとうございます。 参考にしてみます。
- ProKaseifu
- ベストアンサー率51% (98/192)
何かのelementに入っていればどうにか値を取得することは可能な気がしますが、ただ単に <html> <head></head> <body> aaa </body> </html> という画面があったとしてaaaをとるのは難しい気がします。 (innerHTMLならどうにか取れるかもしれないけど・・・) そもそもの設計に問題があるのではないでしょうか。 (画面表示したものと同じ内容をidやname指定してhiddenで保持しておくとかすればもっと簡単に判断できると思います)
補足
>aaaをとるのは難しい気がします。 そうなのですか… では、hiddenで保持するようにしたいと思います。 例えば、 <input type="hidden" name="dou1" value="ウサギ">ウサギ<br> <input type="hidden" name="dou2" value="タヌキ">タヌキ<br> <input type="hidden" name="dou3" value="キツネ">キツネ<br> <input type="hidden" name="dou4" value="ウサギ">ウサギ<br> こんな感じでしょうか?ちょっと自信ないのですが。
- fujillin
- ベストアンサー率61% (1594/2576)
>指定した文字が、同じページ内で2つ以上 存在する場合 という部分の意味がさっぱりわかりませんが、何かの参考にでもなれば・・・ <html> <head> <script language="JavaScript"> <!-- function check() { var msg = (document.getElementById("txt1").value==document.getElementById("txt2").value) ? "重複しています":"OK"; alert(msg); return false; } //--> </script> </head> <body> <form> 文字A:<input type="text" name="txt1" id="txt1" value=""><BR> 文字B:<input type="text" name="txt2" id="txt2" value=""><BR> <input type="button" onClick="check();" value="チェック"> </form> </body> </html>
補足
迅速な回答ありがとうございます。 ですが、ちょっと私が思ってるのとは違いました…; 説明下手で申し訳ないです。 例えば、A.htmlがあります。 指定する言葉を”ウサギ”として、 このページ内で、”ウサギ”という言葉が重複しているとアラート…といった感じです。 指定する言葉は、テキストフィールドにも入ってません。 文字のみを拾って判断したいのですが、ダメでしょうか?
お礼
なるほど、そうなのですか。 ヒット回数が、2個以上になるとアラート表示で注意を促したいだけなので、助かります。 もう少し頑張ってみますね。 ありがとうございます。