从Textarea中的选定文本创建列表html

时间:2012-04-03 09:29:06

标签: javascript jquery

我找到了使用jquery从html标签中的textarea中包装所选文本的各种示例,但我想稍微调整一下,以便在选择多行文本时创建一个列表。

目前,下面的代码将整个选择包装在list标签中,但我还想用列表项的关闭和打开标签替换所有回车 - 因此文本区域中的每一行都是一个新的列表项。 / p>

我认为其中一个问题可能是.val函数将文本区域作为一行读取。

jquery的:

function listText(elementID, openTag, closeTag) {
    var textArea = $('#' + elementID);
    var len = textArea.val().length;
    var start = textArea[0].selectionStart;
    var end = textArea[0].selectionEnd;
    var selectedText = textArea.val().substring(start, end);
    var replacement = openTag + selectedText + closeTag;
    textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));
}

$(document).ready(function () {
    $("#BoldIt").click( function() {
        listText("markItUp", "<ul><li>", "</li></ul>");
    });
});

体:

<textarea id="markItUp" cols="80" rows="20"></textarea>

<br />

<input type="button" value="Bold" id="BoldIt" />

1 个答案:

答案 0 :(得分:0)

将文字拆分为:

function listText(elementID, openTag, closeTag) {
    var textArea = $('#' + elementID);
    var s = "\n";
    var len = textArea.val().length;
    var start = textArea[0].selectionStart;
    var end = textArea[0].selectionEnd;
    var selectedText = textArea.val().substring(start, end);
    var replacement = "";

    var rows = selectedText.substring(start, end).split(s);

    for(var i = 0; i < rows.length; i++) {
    replacement += openTag + rows[i] + closeTag + s;
    }

    textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));
}

$(document).ready(function () {
    $("#BoldIt").click( function() {
    listText("markItUp", "<ul><li>", "</li></ul>");
    });
});