从textarea中删除所选文字

时间:2015-09-06 06:23:14

标签: javascript html css

我有一个html页面,其中有一个文本框(键入您的文本)和TextArea列表。我需要输入文本框,然后单击“添加”按钮,以便文本框中的任何内容都转到我的TextArea列表中。我需要在文本框中输入以下格式。

Name=Value

用户可以使用此文本框快速将名称值对添加到该文本框下方的列表中。让我们说如果我们在上面的文本框中输入Hello=World并点击添加,那么在下面的列表中,它应显示为

Hello=World

如果我们再次在同一文本框中输入ABC=PQR,那么在下面的列表中,它应该显示为这样,这意味着它应该继续在其原始条目下方添加新的名称值对。

Hello=World
ABC=PQR

但是如果语法不正确,就好像它不在Name = Value对中那么它不应该向列表中添加任何东西,而是显示弹出错误的输入格式。名称和值只能包含字母数字字符。我还有两个按钮Sort by nameSort by value。单击这两个按钮之一后,它应使用名称或值对TextArea列表中的条目进行排序。现在,我所有上述事情都没有任何问题。

我添加了另一个名为Delete的按钮。基本上,当按下Delete按钮时,应删除列表框中的所有选定项目。如何添加此功能?我无法理解这一点。

这是我的jsfiddle。我需要使用简单的HTML和Javascript,我不想使用任何库,因为我想保持简单,因为我还在学习。

以下是我的代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>

<style type="text/css">
    #my-text-box {
        font-size: 18px;
        height: 1.5em;
        width: 585px;
    }
    textarea{
        width:585px;
        height:300px;
    }
    .form-section{
        overflow:hidden;
        width:700px;
    }
    .fleft{float:left}
    .fright{float:left; padding-left:15px;}
    .fright button{display:block; margin-bottom:10px;}
</style>

<script language="javascript" type="text/javascript">
    document.getElementById('add').onclick = addtext;
    function addtext() {
        var nameValue = document.getElementById('my-text-box').value;
        if (/^([a-zA-Z0-9]+=[a-zA-Z0-9]+)$/.test(nameValue))
            document.getElementById('output').textContent += nameValue + '\n';
        else
            alert('Incorrect Name Value pair format.');
    }

    document.getElementById('sortbykey').onclick = sortByKey;
    function sortByKey() {
        var textarea = document.getElementById("output");
        textarea.value = textarea.value.split("\n").sort(function(a, b){
            if(a != "" && b != ""){
                return a.split('=')[0].localeCompare(b.split('=')[0])
            } else {
                return 0
            }
        }).join("\n");
    }

    document.getElementById('sortbyvalue').onclick = sortByValue;
    function sortByValue() {
        var textarea = document.getElementById("output");
        textarea.value = textarea.value.split("\n").sort(function(a, b){
            if(a != "" && b != ""){
                return a.split('=')[1].localeCompare(b.split('=')[1])
            } else {
                return 0
            }
        }).join("\n");
    }
</script>

</head>

<body>
    <h3>Test</h3>
    <label for="pair">Type your text</label></br>
    <div class="form-section">
        <div class="fleft">
            <input type='text' id='my-text-box' value="Name=Value" />
        </div>
        <div class="fright">
            <button id='add' type="button">Add</button>
        </div>
    </div>
    </br>
    </br>
    </br>

    <label for="pairs">Name/Value Pair List</label></br>
    <div class="form-section">
        <div class="fleft">
           <textarea id='output'></textarea>
        </div>
        <div class="fright">
            <button type="button" id='sortbykey' onclick='sortByKey()'>Sort by name</button>
            <button type="button" id='sortbyvalue' onclick='sortByValue()'>Sort by value</button>
        </div>
    </div>

</body>
</html>

3 个答案:

答案 0 :(得分:1)

你可以使用类似这样的代码:

document.getElementById('btnDelete').onclick = deleteText;
function deleteText() {
    var textComponent = document.getElementById('output'),
        selectedText = getSelectedText(textComponent);
    if (!selectedText) return;
    textComponent.value = textComponent.value.replace('\n' + selectedText, '');
}

// http://stackoverflow.com/questions/1058048/how-to-get-selected-text-inside-a-textarea-element-by-javascript
function getSelectedText(textComponent)
{
    var selectedText = '';
    if (document.selection != undefined) { // IE
        textComponent.focus();
        var sel = document.selection.createRange();
        selectedText = sel.text;
    } else if (textComponent.selectionStart != undefined) { // other browsers
        var startPos = textComponent.selectionStart;
        var endPos = textComponent.selectionEnd;
        selectedText = textComponent.value.substring(startPos, endPos)
    }
    return selectedText;
}

答案 1 :(得分:1)

如果您使用<select>代替<texarea>并将您的值/名称对添加为<option>,则会更容易。希望this可以帮助你

答案 2 :(得分:0)

我建议使用数组。在此方法中,您可以运行一个函数,将“textbox”的值存储在数组中(然后清除该字段)。 EX:

var newText = document.forms[0].elements[0].value;
//This retrieves and stores the value of 'textbox' into variable 'newText'.
myArray[myArray.length] = newText 
//This adds the value of 'newText' to an array named 'myArray'
document.forms[0].elements[0].value = "";
//This line is optional, it would clear the 'textbox', so you wouldn't have to clear it manually

现在您已经存储了'命令',您可以使用for循环将数组的内容直接打印到textarea,或者避免循环并将数组打印到字符串,然后在textarea的。 (注意:如果将来需要编辑/更改/删除单独的提示,使用数组可能会更有帮助。)