• 締切済み

ページ内検索の限界?

以下のjavascriptを記述してページ内のテキストを検索して移動するという処理をしているのですが、HTMLソースで5万行以降のテキストの検索ができません。 5万行以下のテキストの検索はできるのですが、5万行を超えるテキストを検索すると反応しません。 これはjavascript上の制限事項になるんでしょうか? var fFirst; //はじめかどうかのフラグ var objRange; //TextRangeオブジェクト //検索関数 function Start() { objRange = document.body.createTextRange(); //文字列が空であれば終了 if (document.search_form.txtWord.value.length == 0) { return; } strCheck = document.search_form.txtWord.value; if (fFirst) { fFirst = false; } else { //2度目以降 objRange.move("character", 1); } //セレクトする if (objRange.findText(strCheck)) { objRange.select(); objRange.scrollIntoView(); } }

  • S202
  • お礼率84% (142/169)

みんなの回答

  • ANASTASIAK
  • ベストアンサー率19% (658/3306)
回答No.1

サーバサイドでやるべき。

S202
質問者

お礼

回答ありがとうございます。 やはりサーバサイドでやるしかなさそうですね。 PHPでなんとかやってみます。 そもそもJavascriptでの限界かどうかを知りたかったのですが。

関連するQ&A

  • フレームでページ内検索機能

    2分割のフレームで名前はmenuとmainとします。 menu画面で文字列を入力させ、main画面内の文字列を検索する機能を作っています。 ボタンを1回押したときに最初に一致する文字列が反転するところまでは出来ます。 2回目以降に押したときに次に一致する文字列を反転させたい。 Netscapeでは出来ていますが、IEでの方法が分かりません。 ご教授お願いします。 'menuのソース <form onsubmit="return myFindText(this.key.value)"> <input type=text name=key> <input type=submit value="検索"> </form> function myFindText(text) { if(document.all){ // IE4 var target = parent.main.document.body.createTextRange(); if (target.findText(text)){ target.select(); target.scrollIntoView(); } } else if(document.layers){ //NN4 parent.main.window.find(text); } return false; }

  • 検索機能を付けたhtmlにジャンプ機能を付けたい

    いま、下のような状態で作成しています。 <html lung="ja"> <head> <title>参考資料</title> </head> <body> <!--search--> <form method="get" action="" name="search"> <div class="search">キーワード検索(キーワード入力>「Search」押下)・・・赤く反転したところが、該当箇所です<br /> <input id="search" name="search" size="20" style="width:300px" class="form" /> <input type="hidden" name="mySearch" value="" /> <input type="button" value="Search" class="button" onClick="javascript:doSearch()" /> </div> </form> <pre>   ・   ・   ・ </pre> <script type="text/javascript" language="javascript"> <!-- // フォント(font = "" などを指定する) var fontName = ""; // フォントカラー(変更しない場合は、fontColor = "" とする) var fontColor = ""; // フォントサイズ(単位はpx、変更しない場合は 0 を指定する) var fontSize = 0; // 太字(0:太字にしない、1:太字にする) var isBold = 0; // 斜体(0:斜体にしない、1:斜体にする) var isItalic = 0; // 下線(0:下線をつけない、1:下線をつける) var isUnderline = 0; // 背景色(変更しない場合は、backColor = "" とする) var backColor = "#FF8080"; searchWordHighlighting(); function searchWordHighlighting() { if (!document.body.createTextRange) return; var range = document.body.createTextRange(); var searchStr = getSearchStr(); if (searchStr == "") return; range.collapse(true); while (range.findText(searchStr)){ if (fontName != "") range.execCommand("fontName", true, fontName); if (fontSize > 0) range.execCommand("fontSize", true, fontSize); if (fontColor != "") range.execCommand("foreColor", true, fontColor); if (isBold != 0) range.execCommand("bold"); if (isItalic != 0) range.execCommand("italic"); if (isUnderline != 0) range.execCommand("underline"); if (backColor != "") range.execCommand("backColor", false, backColor); range.collapse(false); } } function getSearchStr() { var urlStr = "" + window.location; var baseStr = "mySearch="; var index = urlStr.indexOf(baseStr); if (index == -1) return ""; urlStr = urlStr.split("%25"); urlStr = urlStr.join("%"); return decodeURIComponent((urlStr.substring(index + baseStr.length)).replace("%25", "%")); } function doSearch() { window.document.search.mySearch.value=encodeURIComponent(window.document.search.search.value); window.document.search.submit(); } //--> </script> </body> </html> これに「Serch」クリック後、該当箇所にジャンプする機能を付けたいです。 教えていただければ幸いです。 宜しくお願いします。

  • 検索表示について

    このようなプルダウン付きの検索バーを作成しています。 この検索結果をこの検索バーの下に表示させるためにはどうすればいいでしょうか?よろしくお願いします。 <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> </head> <body> <script type="text/javascript"> <!-- var site = new Array(); var target = "main"; site[0] = ["Goo", "http://search.goo.ne.jp/web.jsp", "MT", ["from", "USR"], ["IE", "sjis"]]; site[1] = ["Google", "http://www.google.com/search", "q", ["hl", "ja"], ["ie", "Shift_JIS"]]; site[2] = ["Yahoo", "http://search.yahoo.co.jp/bin/search", "p",["ei", "Shift_JIS"]]; window.onload = function() { if (!document.createElement) return; if (document.all && !window.clipboardData && !window.opera) return; // 検索サイトのリストを生成 var select = document.createElement("select"); select.id = "addlist"; for (var i = 0; i < site.length; i++) { var opt = document.createElement("option"); opt.value = i; var str = document.createTextNode(site[i][0]); opt.appendChild(str); select.appendChild(opt); } // デフォルトで選択状態にする場合はその配列番号を option[n] に指定 // select.options[3].selected = true; // 既存の検索フォームにこのドロップダウンを追加 var obj = document.forms[0]; obj.elements[obj.elements.length - 1].value = "検索"; obj.insertBefore(select, obj.elements[1]); // フォームが送信された時に selectSearch() を呼び出す obj.onsubmit = selectSearch; } function jump(){ var url = document.form.select.options[document.form.select.selectedIndex].value; if(url != "" ){ if(target == 'top'){ top.location.href = url; } else if(target == 'blank'){ window.open(url, 'window_name'); } else if(target != ""){ eval('parent.' + target + '.location.href = url'); } else{ location.href = url; } } } function selectSearch() { var str = document.forms[0].p.value; // 入力された検索文字 var num = document.forms[0].addlist.value; // 選択されたリストの番号 // 選択された検索サイトのフォーム生成(送信先の指定) var setform = document.createElement("form"); setform.action = site[num][1]; setform.method = "GET"; // setform.target = "_blank"; // 検索結果を新しいウインドウに表示する場合に追加 // 検索文字クエリ var query = document.createElement("input"); query.type = "hidden"; query.name = site[num][2]; query.value = str; setform.appendChild(query); // 検索文字以外のクエリ if (site[num].length > 3) { for (var i = 3; i < site[num].length; i++) { var extra = document.createElement("input"); extra.type = "hidden"; extra.name = site[num][i][0]; extra.value = site[num][i][1]; setform.appendChild(extra); } } // 生成したフォームを文末に追加してそのフォームを送信 document.body.appendChild(setform); setform.submit(); // document.forms[document.forms.length - 1].submit(); return false; } // --> </script> <br> <form action="http://search.yahoo.co.jp/bin/search" method="GET"> <input type="text" name="p" value="" size="50" maxlength=255 > <input type="submit" value="検索"> </form> </body> </html>

  • 検索ファームの作り方について教えてください!

    検索をフォームを作成したく、下記ソースで作成したのですが、 検索ボタンを押してもうまくページが開きません。 色々調べてみたのですが原因がわからず困っております。 どなたか分かるかたがいらっしゃいましたら教えて頂きたく思います。 また間違ってる箇所の指摘と出来れば解答も頂ければ助かります。 よろしくお願いします。 <head> <script type="javascript"> <!-- function mySearch(frm) { var select = frm.elements["site"]; var sitename = select.options[select.selectedIndex].value; var word = frm.elements["word"].value; document.forms[sitename].elements[0].value = word; document.forms[sitename].submit(); //--> </script> </head> <html> 検索フォーム<br> <form name="google" method="get" action="http://www.google.co.jp/search"> <p><input type="hidden" name="q" value=""></p> </form> <form name="yahoo" method="get" action="http://search.yahoo.co.jp/search"> <p><input type="hidden" name="p" value=""></p> </form> <form lang="ja" onsubmit="mySearch(this); return false;"> <p>検索ワード<input type="text" name="word" size="30"> </p> <p>検索サイト <select name="site"> <option value="google">google</option> <option value="yahoo">yahoo</option> </select></p> <input type="submit" value="検索"> </form> <hr> </html>

  • 検索バーについて

    現在、下のソースを使い検索サイトを作成しています。今、yahooやgoogleのようにtopページでキーワードを入力して検索するところを作成できたのですが、その検索結果を結果ページで表示したいのですが、どうしても表示できません。ソースは下のとおりです。アドバイス等よろしくお願いします。説明が下手ですみません。 (topページ) <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> </head> <body> <script type="text/javascript"> <!-- var site = new Array(); site[0] = ["Google", "http://www.google.com/search", "q", ["hl", "ja"], ["ie", "Shift_JIS"]]; site[1] = ["Yahoo", "http://search.yahoo.co.jp/bin/search", "p",["ei", "Shift_JIS"]]; window.onload = function() { if (!document.createElement) return; if (document.all && !window.clipboardData &&!window.opera) return; var select = document.createElement("select"); select.id = "addlist"; for (var i = 0; i < site.length; i++) { var opt = document.createElement("option"); opt.value = i; var str = document.createTextNode(site[i][0]); opt.appendChild(str); select.appendChild(opt); } var obj = document.forms[0]; obj.elements[obj.elements.length - 1].value = "検索"; obj.insertBefore(select, obj.elements[1]); obj.onsubmit = selectSearch; } function selectSearch() { var str = document.forms[0].p.value; var num = document.forms[0].addlist.value; var setform = document.createElement("form"); setform.action = site[num][1]; setform.method = "GET"; setform.target = "_blank"; var query = document.createElement("input"); query.type = "hidden"; query.name = site[num][2]; query.value = str; setform.appendChild(query); if (site[num].length > 3) { for (var i = 3; i < site[num].length; i++) { var extra = document.createElement("input"); extra.type = "hidden"; extra.name = site[num][i][0]; extra.value = site[num][i][1]; setform.appendChild(extra); } } document.body.appendChild(setform); setform.submit(); return false; } // --> </script> <form action="http://search.yahoo.co.jp/bin/search" method="GET"> <input type="text" value=""> <input type="submit" value="検索"> </form> </body> </html> (結果ページ) <html lang="ja">     : topページのソースと全て同じソースです。 : </form> <iframe src="#" width="100%" height="82%" scrolling="yes" name="main" frameborder="0">ブラウザ</iframe> </body> </html>

  • Javascriptの動的リスト作成について

    Javascriptの動的リスト作成について お世話になっています。 Javascriptで選択リストを動的に変えたいと思っています。 また、Javascriptで作成したリストは、multipleとして複数選択できるようにしたいと考えています。 そこで、下記のようにスクリプトを書きました。リスト2(smallwheretag)が1つのみ選択を許すときは、うまくいったのですが、multipleにするためにnameを配列にしたところ、うまくリストが作成できなくなってしまいました。 なにかスクリプトに変更が必要なのでしょうか?ご教授お願いいたします。 <HTML部> <select name="bigwheretag[]" onchange="javascript:listChange(this.value);"> <option value="">検索項目</option> <option value="11%">自然</option> <option value="12%">街</option> <option value="13%">家庭</option> </select> <select name="smallwheretag[]" multiple> <option value="">大項目を選択して下さい</option> </select> <Javascript部> var where1_text = new Array("川", "海", "山", "滝", "その他"); var where1_value = new Array("1101", "1102", "1103", "1104", "1199"); flag1 = document.form.bigwheretag.value; if (flag1=="11%") { document.form.smallwheretag.length = where1_text.length; for(var i=0; i<where1_text.length; i++) { document.form.smallwheretag.options[i].text = where1_text[i]; document.form.smallwheretag.options[i].value = where1_value[i]; } }・・・・・・・・以下同様

  • 1ページにコピーするボタンを数個つけたい

    JavaScript~サンプル置き場というサイトからコピーしたのですが、 1ページに5~6個テキストフォームとコピーするのボタンをつけたいのですが、どこを変えたらよいかわかりません??? 解る方がいたらよろしくお願いします。 <SCRIPT LANGUAGE="JavaScript"> <!-- var CYA=1 function HantenC(InTA) { var nobTP=eval("document."+InTA) nobTP.focus() nobTP.select() if (document.all&&CYA==1){ therange=nobTP.createTextRange() therange.execCommand("Copy") window.status="Contents highlighted and copied to clipboard!" setTimeout("window.status=''",1800) }} //--> </SCRIPT> <DIV ALIGN=CENTER><FONT SIZE=6><B>コピーをする</B><FONT> <HR SIZE=3 WIDTH=80% COLOR="#0000ff"><BR> <FORM name=test> <INPUT onclick="javascript:HantenC('test.select1')" type=button value=ソースコピー> <BR><BR> <TEXTAREA name=select1 rows=5 cols=45>Copyボタンを押すとTextareaの中身がコピーされます</TEXTAREA> <BR><BR> </DIV>

  • 検索フォームで大変困ってます

    今select boxを用意したマルチな検索フォームを作ってます。 現在困ってる内容は検索した後に、文字化けを起こしてしまいます。 色々調べてみたのですが原因がわからず困っております。 どなたか分かるかたがいらっしゃいましたら教えて頂きたく思います。 また間違ってる箇所の指摘と出来れば解答も頂ければ助かります。 よろしくお願いします。 <script type="text/javascript" charset="ja"> function dosearch() { var sf=document.searchform; var submitto = sf.sengines.options[sf.sengines.selectedIndex].value + escape(sf.searchterms.value); window.location.href = submitto; return false; } </script> <div class="search"> <form name="searchform" onSubmit="return dosearch();"> <input type="text" name="searchterms"> <input type="image" alt="検索" width=30 height=30 src="Search.png" style="vertical-align:-10px;> </form> </div> <div class="select"> <form name="searchform" onSubmit="return dosearch();"> <select name="sengines"> <option value="http://www.google.com/search?q=" selected>Google</option> <option value="http://search.yahoo.co.jp/search?p=">Yahoo</option> <option value="http://www.bing.com/search?q=">Bing</option></select> </form> </div>

    • ベストアンサー
    • HTML
  • javaスクリプトによりフォーム入力

    javaスクリプトによりフォーム入力を製作中です。 ラジオボタン、チェックボックス、プルダウン選択を選択すると、同ページのテキストエリアにそれらを選択した時点で反映されるというものです。 html構造として table/ 項目1 項目2 項目3 項目4 ・ ・ ・ ------ テキストエリア ------ /trable となっていきます。 var copytoclip=1 function CopyAll(mytext) { var tempval=eval("document."+mytext) tempval.focus() tempval.select() if (document.all&&copytoclip==1){ therange=tempval.createTextRange() therange.execCommand("Copy") setTimeout("window.status=''",1800) } } function setChars(form) { if(form.n1[0].checked) { str1 = document.myform.n1[0].value } else if(form.n1[1].checked) { str1 = document.myform.n1[1].value } else if(form.n1[2].checked) { str1 = document.myform.n1[2].value } else { str1 = "テキストテキスト" } /*下がテキストエリアへ反映される*/ document.myform.mytext.value = "hogehoge" + str1 +・・・・ + "\n\n" } といったものです。 【苦戦しているところ】 選択項目がひとつしかない場合に、チェック項目を作成しても テキストエリアへ反映されません。 -・--・--・--・--・- また、これとは別によりいいサンプル等ありましたら、教えていただけるとありがたいです。

  • JavaScript制御のフォームを1ページに複数設置するには?

    先日こちらのサイトで、1つのセレクトボックスで1度に複数の情報をCGIに渡す方法を教えて頂き、 <script type="text/javascript"> <!-- function func() { var n = document.F1.S1.selectedIndex; var d = document.F1.S1.options[n].text.split(" "); document.H1.AA1.value=d[1].slice(0,-1); document.H1.AA2.value=d[0]; document.H1.AA3.value=document.F1.T1.value; document.H1.submit(); } // --> </script> <form name="F1" action="#"> <select name="S1"> <option>3本セット 100円 <option>7本セット 200円 </select> <input type="button" value="カートへ" onclick="func()"> </form> <form name="H1" action="cart.cgi"> <input type="hidden" name="AA1">  ・  ・ <input type="hidden" name="AA3"> </form> というフォームを作ったのですが、同じページに同様のフォームがもう一つ必要になりました。 そこで上記ソースに、フォーム名や変数名を変えたScript <script type="text/javascript"> <!-- function func() { var n = document.F2.S2.selectedIndex; var d = document.F2.S2.options[n].text.split(" "); document.H2.AA4.value=d[1].slice(0,-1); document.H2.AA5.value=d[0]; document.H2.AA6.value=document.F2.T2.value; document.H2.submit(); } // --> </script> を追加し、 これに対応するフォームも追加したのですが、1つめのフォームから「カートへ」でデータを送っても2つめのフォームの内容が送信されてしまいます。 どこをどう直したらよいのでしょうか?

専門家に質問してみよう