選択範囲を文字列で置き換える
フォーム上の入力欄(textarea)で、選択範囲を指定文字列と置き換える処理。
/** * @param Element field 対象textareaフィールド(getElementById等で取得) * @param string str 差し込む文字列 */ function insertString (field, str) { if (field.selectionStart) { var position = field.selectionStart; field.value = field.value.substr(0, position) + str + field.value.substr(field.selectionEnd, field.value.length); field.selectionStart = position + str.length; field.selectionEnd = field.selectionStart; } else { // IE対応 field.focus(); field.document.selection.createRange().text = str; // field.value += str; } }
最近JavaScriptのネタばっかりだな。
実はもうひとつネタがあるのだが、こちらは仕込みに若干時間を要するので、この週末にでも。
7/10 16:55 追記: 誤りを発見。一部修正。
当店はテイクアウト禁止です。(スマイル)
よくある「画像お持ち帰り禁止」対応。
その様な依頼には「やっても無駄ですよ」と答えることにしているが、「それはわかっているがやってくれ」と改めて依頼されるのが常。
ググってもなかなか「これ」というサンプルが見つからず、仕方なく手書きした。きっと再発明だろうが、それはそれ。
function denyTakeOut () { var doNothing = function () {return false;} var configureElement = function (element) { if (element.oncontextmenu == null) { element.oncontextmenu = doNothing; element.onselectstart = doNothing; element.onmousedown = doNothing; } } var elements = $$('.deny_take_out'); for (var i = 0 ; i < elements.length ; i ++) { configureElement(elements[i]); } }
prototype.jsを使用しているので、別途インクルードが必要。
<script type="text/javascript" src="/path/to/prototype.js"></script>
お持ち帰りを禁止したい画像のスタイルに、 "deny_take_out" クラスを追加。
<img src="/path/to/image1.png" width="100" height="100" alt="画像1" class="deny_take_out" /> <img src="/path/to/image2.png" width="100" height="100" alt="画像2" class="icon deny_take_out" />
htmlの最後(body閉じタグの直前とか)で、denyTakeOut関数を実行。
ホントはwindow.onloadあたりで実行した方がキレイ。
<script type="text/javascript"> denyTakeOut(); </script>
取り急ぎ、Safari 4/Mac, Firefox 3.5/Mac, IE7 だけチェック済。
ほかのブラウザでの確認は後ほど。