2012-04-03 96 views
0

我发现使用jquery从html标签中的textarea中包装选定的文本的各种示例,但我想稍微调整此选项以在选择多行文本时创建列表。从Textarea中选定的文本创建列表html

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

我认为其中一个问题可能是.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" /> 

回答

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>"); 
    }); 
}); 
相关问题