7

編集可能な div 内のカーソルの位置を取得するために使用するこのコードがあります。

   function getMeCurPos(element){
       if (typeof window.getSelection != "undefined") {
          var range = window.getSelection().getRangeAt(0);
          var preCaretRange = range.cloneRange(); 
          preCaretRange.selectNodeContents(element);
          preCaretRange.setEnd(range.endContainer, range.endOffset); 
          caretOffset = preCaretRange.toString().length;  
          return caretOffset;
       }                        
   }

問題は、返される caretOffset がテキスト コンテンツのみをカウントし、html タグをカウントしないことです。例:

私の編集可能な div でこの文字列を考えてみましょう: Hey <b>jony</b>, whats goin on in the | party

※カーソルは|文字で表します。

getMeCurPos(ele) を実行すると :30が返されますが、返されるはず37です。bタグは数えません

4

3 に答える 3

0

この記事からコードを取得しました: Select all DIV text with single mouse click

            <script type="text/javascript">
                function selectText(containerid) {
                    if (document.selection) {
                        var range = document.body.createTextRange();
                        range.moveToElementText(document.getElementById(containerid));
                        range.select();
                    } else if (window.getSelection) {
                        var range = document.createRange();
                        range.selectNode(document.getElementById(containerid));
                        window.getSelection().addRange(range);
                    }
                }
            </script>

            <div id="selectable" onclick="selectText('selectable')">http://example.com/page.htm</div>
于 2015-02-24T11:54:55.260 に答える