2011-03-02 12 views
1

私はテキストエリアを持っています。フリーテキスト入力の中には、<tag>で囲まれたタグがいくつか挿入されています。 <>内のタグをクリックして、全体のタグを選択して削除したいと考えています。一度に一人ではなく、すべてのもの。jQueryでテキストエリア内の単語全体を選択

<textarea>some text and <my tag> here</textarea> 

クリックで正規表現チェックをする必要があると思いますか?


UPDATE:

OK、私はこの質問を修正しようとするでしょう。私はそれをもっと難しくするためにやっているわけではありません、私はブレインストーミングを続けるだけでなく、私も行きます。のは、私がメッセージを構成し、TAG1とTAG2か一つだけのいずれかの両方を挿入するとしましょう、今

var myTag1 = "my tag", 
myTag2 = "another tag"; 

$("#tag1").text(myTag1); 
$("#tag2").text(myTag2); 

$(".tags").click(function() { 
    var insertTag = $(this).text(); 
    $('#myTextArea').append(" &lt;" + insertTag + ">"); 
}); 

<div id="tag1" class="tags"></div> 
<div id="tag2" class="tags"></div> 

<textarea id="myTextArea"></textarea> 

のは、私は私のタグが事前に定義があるとしましょうと私は、対応するIDをクリックすることで、私のテキストエリアに入れ。そのテキストアレイ内のタグ挿入をクリックしてそのタグを削除することは可能ですか?周囲の<および>?

DEMO:http://jsfiddle.net/2K2CX/2/

+0

「全体」と言ったときには、「<' and '>」や*テキスト*部分の「タグ」を含むすべてのものを意味しますか? –

+0

はい、すべての間にある単語< and ><>を含む1語句であるかどうか。 – santa

答えて

2
<textarea id="textarea" style="width:500px;height:200px;">Lorem ipsum dolor sit amet, consectetur <adipiscing> elit. Aliquam adipiscing feugiat vestibulum. <Proin risus massa>, cursus quis eleifend tristique, pharetra eget ligula. <Suspendisse potenti>. Etiam vel lectus ante. Fusce varius laoreet lobortis. Aliquam ornare dictum lacus, non pharetra mauris fringilla sit amet. Quisque accumsan viverra dui, non pellentesque arcu bibendum et. Sed vel odio in libero scelerisque posuere. Phasellus euismod leo non arcu vulputate in sollicitudin sem facilisis. Morbi et dui luctus sem molestie commodo ac vel justo.</textarea> 
<script type="text/javascript"> 
    var textarea = document.getElementById("textarea"); 
    textarea.onclick = textarea_Click; 

    function textarea_Click() { 
     var caret = getCaretPosition(textarea); 
     var text = textarea.value; 
     var begin = caret - 1; 
     while (begin >= 0) { 
      if (text.charAt(begin) == '>') return; 
      else if (text.charAt(begin) == '<') break; 
      else begin--; 
     } 

     if (begin >= 0) { 
      var end = caret; 
      while (end < text.length) { 
       if (text.charAt(end) == '>') break; 
       else end++; 
      } 

      if (end < text.length) 
       setSelection(textarea, begin, end); 
     } 
    } 

    function getCaretPosition(el) { 
     if (el.selectionStart) { 
      return el.selectionStart; 
     } else if (document.selection) { 
      var r = document.selection.createRange(); 
      if (r == null) return 0; 
      var re = el.createTextRange(); 
      var rc = re.duplicate(); 
      re.moveToBookmark(r.getBookmark()); 
      rc.setEndPoint('EndToStart', re); 
      return rc.text.length; 
     } 
     return 0; 
    } 

    function setSelection(el, begin, end) { 
     if ("selectionStart" in el) { 
      el.selectionStart = begin; 
      el.selectionEnd = end + 1; 
     } else if (document.selection) { 
      var range = el.createTextRange(); 
      range.collapse(true); 
      range.moveEnd('character', end + 1); 
      range.moveStart('character', begin); 
      range.select(); 
     } 
    } 
</script> 

EDIT:あなたはjQueryのを使用しているので、fieldSelection pluginは物事がたくさんきれいになるかもしれません。簡単な正規表現のソリューションについては

、何もすぐに心に来ることはありませんが、私も何regexpertてるん:)再編集

:それは今、IEをサポートするように私は私の元のコードを変更しました。 Firefox、Chrome、およびIE 6/7/8でテストされています。

+0

聖なる煙!はい、私は複数のブラウザをサポートする必要がありますが、あなたの質問から、私はそれがまっすぐ前方ではないかもしれないと思う?私は最初の質問を更新したばかりですが、少し混乱させていただければ幸いです。 – santa

+0

@Michael私はあなたのコードをjsfiddleに差し込んだ。うわー! http://jsfiddle.net/wwBTp/ – santa

+0

はい、私はjQueryを使用していますが、私の学習曲線は依然としてかなり険しいですが、まっすぐJSよりも簡単だと思います。 – santa

関連する問題