テキストがクリックされたときに jquery を使用してスパン内のテキストを選択する方法を探しています。
たとえば、以下の HTML スニペットでは、「\apples\oranges\pears」というテキストがクリックされたときに選択されるようにします。
<p>Fruit <span class="unc_path">\\apples\oranges\pears</span></p>
私はこれを自分で実装しようとしましたが、役に立ちませんでした。
テキストがクリックされたときに jquery を使用してスパン内のテキストを選択する方法を探しています。
たとえば、以下の HTML スニペットでは、「\apples\oranges\pears」というテキストがクリックされたときに選択されるようにします。
<p>Fruit <span class="unc_path">\\apples\oranges\pears</span></p>
私はこれを自分で実装しようとしましたが、役に立ちませんでした。
ネイティブJavaScriptで実装できます。jsFiddleでの実用的なデモンストレーション。コードは次のようになります。
$('.unc_path').click(function (){
var range, selection;
if (window.getSelection && document.createRange) {
selection = window.getSelection();
range = document.createRange();
range.selectNodeContents(this);
selection.removeAllRanges();
selection.addRange(range);
} else if (document.selection && document.body.createTextRange) {
range = document.body.createTextRange();
range.moveToElementText(this);
range.select();
}
});
実際のデモンストレーション: http://jsfiddle.net/dystroy/V97DJ/
$('.unc_path').click(function (){
var text = $(this).text();
var $input = $('<input type=text>');
$input.prop('value', text);
$input.insertAfter($(this));
$input.focus();
$input.select();
$(this).hide();
});
アイデア(上記のコメントを参照)は、スパンを入力に動的に置き換えることです。これは、テキストを選択したことを知っているクロスブラウザーの方法のみです。
おそらく選択を解除したり、スタイルで境界線を削除したりしたいので、これは道のりの半分に過ぎないことに注意してください。
また、スパンとは対照的に、入力は複数の行にまたがることはできないことも正確にする必要があります。
非常に特定の点を除いて、これを実際のアプリケーションで使用できる/使用すべきではないと思います。
編集:新しいバージョン: http://jsfiddle.net/dystroy/A5ZEZ/
このバージョンでは、フォーカスが失われるとテキストが通常に戻ります。
$('.unc_path').click(function (){
var text = $(this).text();
var $this = $(this);
var $input = $('<input type=text>');
$input.prop('value', text);
$input.insertAfter($(this));
$input.focus();
$input.select();
$this.hide();
$input.focusout(function(){
$this.show();
$input.remove();
});
});
特定のスパンを選択するには、そのスパンに提供される ID が必要です。それ以外の場合は、利用可能なすべてのスパンのリストをループして取得する必要があります。
これを例として見てみましょう(id属性を追加しました)
<p>Fruit <span class="unc_path" id="span1">\\apples\oranges\pears</span></p>
JQueryは次のようになります
$('span1').text() // if you want to take the text
$('span1').html() // if you want to take the html