Javascript选择文本和格式textarea

时间:2012-05-02 15:50:35

标签: javascript text format textarea

我正在尝试允许用户对评论系统中使用的textarea中的文本进行简单格式化(穷人的文本编辑器)。想让它们用光标选择文本,然后单击按钮进行格式化。我的问题是我如何获取javascript来获取并返回所选文本。想象一下它应该是这样的:

<script>
function formatText(field) {
//gets text
var text;
text = field.value.substring(field.selectionStart, field.selectionEnd);
//formats it
var text = '<b'>+text+'</b>';
//returns it
field.value.substring(field.selectionStart, field.selectionEnd); = text;
}
</script>

<body>
<textarea id="field"></textarea><button onclick="formatText('field')">Make bold</button>
</body>

更新:以下代码获取选定文本,格式化然后将其发送回textarea - 但是,它替换textarea中的所有文本...所以我只需要替换textarea中的所选文本 - 而不是全部 - - 我会完成的:

<head>
    <script type="text/javascript">
        function GetSelection () {
            var selection = "";

            var textarea = document.getElementById("field");
            if ('selectionStart' in textarea) {
                    // check whether some text is selected in the textarea
                if (textarea.selectionStart != textarea.selectionEnd) {
                    selection = textarea.value.substring  (textarea.selectionStart, 

textarea.selectionEnd);
                }
            }
            else {  // Internet Explorer before version 9
                    // create a range from the current selection
                var textRange = document.selection.createRange ();
                    // check whether the selection is within the textarea
                var rangeParent = textRange.parentElement ();
                if (rangeParent === textarea) {
                    selection = textRange.text;

                }
            }

            if (selection == "") {
                alert ("No text is selected.");
            }
            else {
                selection = "<b>"+selection+"</b>";
        document.getElementById('field').value = selection;

            }
        }
    </script>
</head>
<body>
    <textarea id="field" spellcheck="false">Select some text within this field.</textarea>
    <button onclick="GetSelection ()">Get the current selection</button>
</body>

我认为有一种方法可以指定document.getElementByID.value.substr可能会这样做,但我不知道语法。

2 个答案:

答案 0 :(得分:0)

在您的代码中存在以下问题:

  1. var text
  2. 每一行必须以;

    结尾
    1. <button onclick="formatText("field")">
    2. 如果你需要引号,那么开始引用必须以引号结束,即对于像#34这样的字符串;这是我想要处理的文本&#34;然后那些内部引用需要是单引号

      onclick="formatText('field')"
      
      1. text = field.value.substring(field.selectionStart, field.selectionEnd);
      2. 代码将字符串传递给函数,该函数没有值属性\ method。我们想要文本字段中的文本,因此我们使用&#39;元素&#39;即使用document.getElementById('field')

        持有它

        然后我们只设置那个可以解决问题的元素。

        如果您需要替换文本,只需将值分配给

        document.getElementById('field').value = ...
        

        这是一个例子..

        <script type="text/javascript" >
          function formatText() {
              //gets text
              //text = document.getElementById('field').value;
              //formats it
              document.getElementById('field').style.fontWeight = "bold";
          }
        </script>
        
        </head>
        <body>
        <textarea id="field"></textarea><button onclick="formatText()">Make bold</button>
        </body>
        

        在此处查看http://jsfiddle.net/YcpUs/

答案 1 :(得分:0)

这是:穷人的​​文字编辑器。使用SelectionStart和SelectionEnd应用于textarea中的文本以获取所选文本。然后在重新格式化之后,将textarea文本从三个部分放回到一起,然后选择文本,选定文本和选择文本之后。使用document.getElementById('textareaid')返回textarea。值=汇编文本。

<html>
<head><script>
function format () {
    // code for IE
    var textarea = document.getElementById("textarea");

    if (document.selection)
    {
    textarea.focus();
    var sel = document.selection.createRange();
    // alert the selected text in textarea
    alert(sel.text);

    // Finally replace the value of the selected text with this new replacement one
    sel.text = '<b>' + sel.text + '</b>';
    }

    // code for Mozilla

    var textarea = document.getElementById("textarea");

    var len = textarea.value.length;
    var start = textarea.selectionStart;
    var end = textarea.selectionEnd;
    var sel = textarea.value.substring(start, end);

    // This is the selected text and alert it
//    alert(sel);

    var replace = '<b>' + sel + '</b>';

    // Here we are replacing the selected text with this one
    textarea.value = textarea.value.substring(0,start) + replace + textarea.value.substring(end,len);

var formatted = textarea.value;
document.getElementById('field').value = formatted;
}

</script></head>
<body>
<textarea id="textarea">One two three four five six seven eight</textarea><button onclick="format 

()">Format selected text</button>
</body>
</html>