こんにちは、JavaScriptを使ったページ内検索についての質問です。
http://computer.shipweb.jp/soft/pageinserch.htm
こちらのサイト様を参考に、自分のサイトにページ内検索をつけ正常に作動はしましたが、
検索方向が「上から下」の一方のみになっています。
これを「下から上」方向へも検索出来ないかと考えているのですが、
JavaScriptに関してほぼ無知に近い為何をどう変えれば良いのかわからず困り果てております;
検索方向の記述がどこの部分なのか、出来ればどう変えれば良いのかも、
分かる方がいらっしゃいましたらご教授お願い致します。
No.2ベストアンサー
- 回答日時:
だめでしたか。
2方向の件は最初の質問内容をいい加減に読んだこちらのミスです。
申し訳ありません。
承知の上で使ってると思いますけど、要素名や属性まで検索の対象になるのは使い勝手が悪そう。
ブラウザが備える機能を補うものでないと意味はないかなと個人的には思います。
一応検証に使ったソースコードを置いておきますが、これもいい加減です。あくまで参考程度にして下さい。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>サンプル</title>
<script type="text/javascript">
var serchindex = -1;//ココ
var serchcounter = 0;
var serchstr = "";
var serchwordcounter = 0;
var start = 0;
var dir = "";
function wordserch() {
var radio = document.parts.radio1;
for (var n = 0; n < radio.length; n++) {
if (document.parts.radio1[n].checked) {
if (dir != document.parts.radio1[n].value) {
dir = document.parts.radio1[n].value;
serchindex = (dir == "down") ? 0 : -1;
}
break;
}
}
var s = document.parts.text1.value;
if (s != serchstr) {
serchindex = (dir == "down") ? 0 : -1;//ココ
serchstr = s;
serchwordcounter = 0;
}
var bCrumb = new Array();
var i;
while (serchstr.indexOf(' ') >= 0) {
serchstr = serchstr.replace(" ", " ");
}
while (serchstr.indexOf('|') >= 0) {
serchstr = serchstr.replace("|", " ");
}
while (serchstr.indexOf('&') >= 0) {
serchstr = serchstr.replace("&", " ");
}
bCrumb = serchstr.split(" ");
for (i = serchwordcounter; i < bCrumb.length; i++) {
serchstring = bCrumb[i];
serchcounter++;
ref = serch(serchstring);
if (!ref) {
alert('検索単語が見つかりません');
}
if (ref == true && start >= 0) {
break;
} else if (ref == true && start < 0) {
serchwordcounter++;
serchindex = (dir == "down") ? 0 : -1;//ココ
break;
} else {
serchwordcounter++;
serchindex = (dir == "down") ? 0 : -1;//ココ
}
}
}
function serch(txt, index) {
var before, after, objstr;
kazu = 0;
serchstr = txt;
objct = document.getElementById('UR');
str = objct.innerHTML;
if (serchindex < 0) serchindex = str.length;//ココ
if (dir == "down") {
start = str.indexOf(serchstr,serchindex);//ココ
} else {
start = str.lastIndexOf(serchstr, serchindex);
}
if (start > 0) {
before = str.substring(0, start);
txt = "<B><A NAME='serchstr" + serchcounter + "'>" + serchstr + "</A></B>";
after = str.substring(start + serchstr.length);
objstr = before + txt + after;
objct.innerHTML = objstr;
location.hash = "#serchstr" + serchcounter;
serchindex = (dir == "down") ? start + txt.length : start;//ココ
return true;
} else {
return false;
}
}
</script>
</head>
<body>
<form name="parts" action="#">
<div><input type="text" name="text1">
<input type="button" onclick="wordserch()" value="検索">
<input type="radio" name="radio1" value="down" checked>down
<input type="radio" name="radio1" value="up">up
</div>
</form>
<div id="UR">~</div>
</body>
</html>
再度のご回答とご確認ありがとうございます。
貼って頂いたソースできちんと動作しました!
要素名や属性の件ですが、
自サイトがアイテムデータサイトとなっておりまして、
検索対象が全て日本語(ひらがな・カタカナ・漢字、稀に数字)ですので
そこらへんは大丈夫かなと思います。
ご教授頂き本当にありがとうございました。
No.1
- 回答日時:
str = objct.innerHTML;
if (serchindex < 0) serchindex = str.length;//ココ
start = str.lastIndexOf(serchstr, serchindex);//ココ
if (start > 0) {
まずココを。それから先頭行の
var serchindex = -1;//ココ
あといくつか serchindex = 0 がありますけど
そこもすべて-1を代入します。最後に
serchindex = start;//ココ
最終行近くにあるココを書き換えてみて下さい。
一応動きましたけど、動作確認は十二分に。
ご回答ありがとうございます!
さっそく試してみましたが、上手く動作しませんでした・・・
どこか解釈を間違えてしまっているのでしょうか;
str = objct.innerHTML;
if (serchindex < 0) serchindex = str.length;//←この一文を付けたし
start = str.lastIndexOf(serchstr, serchindex);//←lastを付けたし
if (start > 0) {
全ての「serchindex = 0」の0を-1に変える。
最後付近「serchindex=start+txt.length;」を→「serchindex = start;」に変える。
で合ってますでしょうか?
お手数ですが確認して頂けますと幸いです;
自分の方でも、ご回答を参考に引き続き頑張ってみます。
それと質問内容の補足ですが、
イメージしているのは、質問内容に貼ったサイト様のフレーム版+
http://usagi-js.com/sample/jssample9_2.htm
こちらのサイト様のように上からと下からの2方向で切り替えて検索が出来る機能です。
説明不足で申し訳ありません;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SEO 検索エンジン反映遅い 1 2022/06/04 07:35
- その他(ブラウザ) 教えて!gooなのですが、投稿者名で検索されたら過去の質問が出てきてしまいますか? 3 2023/03/13 02:51
- その他(SNS・コミュニケーションサービス) Yahoo!とGoogle検索のしくみの違いを教えてください 2 2022/08/14 01:53
- SEO 意図しないページが検索ヒットする問題 2 2022/05/19 14:35
- その他(プログラミング・Web制作) パイソンでのプログラミングについて 3 2022/08/11 20:31
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Google Maps iPhoneのGoogle検索窓を通常の大きさに 戻す方法を教えて頂けませんか?(切実) 日本全国の 2 2022/10/02 02:08
- ホームページ作成・プログラミング パスワードつきホームページ トップページ以下はどうなる 6 2022/08/16 12:04
- WordPress(ワードプレス) WordPressのサイトにPDFをアップロードした際にGoogleなどの検索結果に出ないでほしい 1 2022/08/03 10:44
- その他(IT・Webサービス) 乗換案内(区間の一部を指定して有料特急を使用する検索) 4 2023/06/25 22:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
jQueryのload()を使用して外部...
-
C# 演算 奇数と偶数 表現の仕方
-
Javaで避けるゲームを作ってい...
-
getElementByIdでASP.NETのText...
-
【JavaScript】数当てゲームを...
-
C#で、ContextMenuStripに動的...
-
ASP.NET MVCでObjectをjsに渡す
-
google apps scriptの終了のさせ方
-
JavaScriptで平日のみをカウン...
-
responseTextから連想配列へ
-
VSCODE[Python]の設定について
-
特定のclassを表示、非表示にする
-
JavaScriptで文字列の特定文字...
-
XMLの空白要素をJavas...
-
翌月を取得するGASが分かりません
-
今日で生まれて何日何分何十秒...
-
自分のwebページにtwitterのつ...
-
JAVAScriptでNotePad操作
-
html javascript リンク先アド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
メールフォームの日付入力フォ...
-
GASでundefinedエラーが出ます
-
ジェネレーターの作り方
-
GASでGoogleフォームの自動返信...
-
なぜmatchメソッドがエラーにな...
-
翌月を取得するGASが分かりません
-
ローカルにあるファイルを検索...
-
HTMLで作った時報アプリが動き...
-
ASP.NETのコントロールの値をJa...
-
C# 演算 奇数と偶数 表現の仕方
-
html javascript リンク先アド...
-
gas スプレッドシートがアクテ...
-
javascriptでテーブルに追加し...
-
VSCODE[Python]の設定について
-
JavaScriptで決まった「時刻」...
-
ASP.NET MVCでObjectをjsに渡す
-
イベントが初めの一回しか起き...
-
jqGridについて
おすすめ情報