ユーザーリクエスターと TextRange オブジェクト間の関連付けにより、これは JavaScript オブジェクトのテキスト部分を処理するために使用されるオブジェクトです。
TextRange は、HTML 要素内のテキストを表すために使用されるオブジェクトです。通常、このオブジェクトはあまり使用されませんが、IE4.0 ではすでに提供されています。ただし、TextRange によって提供される呼び出しメソッドは比較的わかりにくいので、それを使って何ができるでしょうか?
TextRange の従来の使用法は、Web ページ上でユーザーがマウスで囲んだテキスト コンテンツを変更、削除、追加などの操作を行うことです。ただし、その古典的な用途は、Web ページ内のテキストを検索し (これは比較的単純です)、入力ボックスのカーソルの位置を取得することです。後者は、入力を制限する MaskTextBox など、さらに多くの便利な用途を導き出すことができます。その中心的な技術点は、入力ボックスのカーソル位置を取得し、正規表現を使用して入力内容を決定することです。後で紹介する「矢印キーを使用した入力ボックス マトリックスの自然なナビゲーション」もありますが、技術的なポイントは入力ボックス内のカーソル位置を取得することです。
入力ボックス内のカーソル位置を取得するコード全体は実際には非常に短いですが、これらのオブジェクトとメソッドは一般的には使用されません。
JSコード
<span style="font-size: medium;"><script language="javascript"> function GetCursorPsn(txb) { var slct = document.selection; var rng = slct.createRange(); txb.select(); rng.setEndPoint("StartToStart", slct.createRange()); var psn = rng.text.length; rng.collapse(false); rng.select(); return psn; } </script></span>
ここでは、入力ボックスの操作で GetCursorPsn() メソッドを使用した場合の副作用について説明します。
入力ボックス用
HTML コード
<span style="font-size: medium;"><input type="text" onkeydown="GetCursorPsn(this)"></span>
Shift キーと左矢印キーを使用して
のテキストを選択することはできなくなります。HTML コード
<span style="font-size: medium;"><textarea onkeydown="GetCursorPsn(this)"></textarea></span>
を使用すると、Shift、上下左右の矢印キーを使用してテキストを選択できなくなります。コードがテキストへの現在のカーソルの startPoint を取得した後、rng.collapse(false); を呼び出すと、テキスト ボックス内のテキストの EditPoint が変更されるためです。
1. ユーザーの要件を満たすコード スニペット。ユーザーの変更を容易にするために、上下左右の 4 つのキーを使用してテキスト ボックスにジャンプし、同時にテキスト ボックスの内容を選択します。コードは次のとおりです:
JSコード
<span style="font-size: medium;">var range = $currentTextfield.createTextRange();//$currentTextfield为jQuery对象 range.moveStart('character',0); range.select();</span>
以下は、私が個人的に非常に良いと感じている TextRange に関する輸入記事です:
HTML コード
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> new document </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style> body { font-size:12px; } #show { background-color:#CCFF99; } </style> </head> <body> <textarea id="content" cols="30" rows="10"> 河中鱼类离奇死亡,下游居民频染怪病,沿岸植物不断变异,是残留农药?还是生化攻击?敬请关注今晚CCTV-10《科学探索》,即将播出的专题节目:《神秘的河边洗脚人--中国男足》 </textarea> <button id="btn">获取选中值</button> <div id="show"></div> <script> String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); } /* 方法一 FF下有点问题 */ function getSelectText() { try{ // IE: document.selection.createRange() W3C:window.getSelection() var selectText = (document.selection && document.selection.createRange )? document.selection.createRange().text : window.getSelection().toString(); if(selectText != null && selectText.trim() != ""){ return selectText; } }catch(err){} } /* 方法二 */ function getSelectText2(id) { var t = document.getElementById(id); if(window.getSelection) { if(t.selectionStart != undefined && t.selectionEnd != undefined) { return t.value.substring(t.selectionStart, t.selectionEnd); } else { return ""; } } else { return document.selection.createRange().text; } } document.getElementById('btn').onclick = function() { document.getElementById('show').innerHTML = getSelectText2('content'); } </script> </body> </html>