あっ!
http://oshiete.goo.ne.jp/qa/6138011.html
css:: color: #0;
は、だめだったか。
getStringRange 思考停止中。
/(最高)(気温)/
正規表現でヒットした文字列が、配列に格納されていて、['最高気温','最高','気温']
それぞれの配列の文字の index を調べるのは、indexOf で先頭から?
いや〜あらためて、無茶振りだなぁ〜。
正規表現の複数には、未対応です。
<!DOCTYPE html> <title></title> <body> <h1><em>洋野</em>町(ひろのちょう)</h1> <h2>プロフィール</h2> <ul> <li> <em>洋野</em>町は、岩手県の中で、最北端に位置し、東側は太平洋に面しています。 <li> 「リアス式海岸」といえば、「三陸」を連想する人もいると思います。残念ながら洋野町は、 そこより北に位置し、範囲に含まれません。そしてこれといって特徴がありません。 <li> 人口は、7月31日現在で、19420人です。(100歳を超えなくても、所在不明な人はいます。予測) <li> 数年前に、隣の大野村と合併しました。それまでは、種市町(たねいちまち)と呼ばれていました。 <li> 「南部もぐり」と呼ばれ、潜水技術が発展しており、日本中の海洋建設の基礎工事現場などで、本町出身者の方々は活躍しています。 <li> 本州最東端は、洋野町から南に100kmほどの地点にある半島です。 </ul> <script> //@cc_on var getStringRange = function (root, search, index, offset) { var doc = root.ownerDocument; var text = root.textContent; var result = [ ]; var pointer = 0; var Node = root; var Offset, range, words; var m, n, o; var regFlag = search instanceof RegExp; var lastIndex = 0; var wordsLength; //引数チェック if (2 > arguments.length) { return; } index = index || 0; //文字の検索 while (true) { //正規表現で検索なら if (regFlag) { search.lastIndex = lastIndex; words = search.exec (text); if (! words) break; lastIndex = words.index; } //文字列で検索なら else { lastIndex = text.indexOf (search, lastIndex); if (-1 === lastIndex) break; words = { '0': search, 'index': lastIndex }; //正規表現の形式に合わせて } //範囲を作成する range = null; o = lastIndex + words[0].length; lastIndex += index || 0; offset = offset || words[0].length; //検索語の開始位置から終了位置までのループ while (true) { if (lastIndex < pointer) Offset = Node.data.length - pointer + lastIndex; else { while (pointer <= lastIndex) { do { n = Node; Node = n.firstChild; if (! Node) { while (Node = n.nextSibling, ! Node) { n = n.parentNode; //異常終了 if (! n) throw new Error; //正常終了 if (root == n) return null; } } } while (3 !== Node.nodeType); if (m = pointer, lastIndex <= (pointer += Node.data.length)) { Offset = lastIndex - m; break; } }; } //終了位置として処理 if (range) { range.setEnd (Node, Offset); result.push (range); break; } //range が無いのなら、開始位置として処理 else { range = doc.createRange (); range.setStart (Node, Offset); lastIndex += offset; result.push (range); } }; lastIndex = o; }; return result; }; //_______ var ranges = getStringRange (document.body, /(最[東西南北]端)/g); var selection = getSelection (); if (ranges) { selection.removeAllRanges (); for (var i = 0, r; r = ranges[i++]; ) selection.addRange (r); } alert("ok") var ranges = getStringRange (document.body, '洋野町', 1, 10);// 検索対象文字数より大きくても可?マイナスやるんだろうか? var selection = getSelection (); if (ranges) { selection.removeAllRanges (); for (var i = 0, r; r = ranges[i++]; ) selection.addRange (r); } </script>
それにしても片足でのジャンプは、腰にくる!