Javascript 在文本区域中获取所选文本
我想将所选文本存储在变量中,然后按按钮删除所选文本。最好使用jquery,但我不介意使用基本的javascript 提前谢谢 更新: 谢谢George,我已经尝试了您所指的示例,该示例将代码剥离到我所需的位置,但我无法让它在单击按钮时工作。只有当我将“添加章节”改为“文本区域”时,它才起作用。知道我的代码有什么问题吗?谢谢Javascript 在文本区域中获取所选文本,javascript,jquery,dom,textarea,Javascript,Jquery,Dom,Textarea,我想将所选文本存储在变量中,然后按按钮删除所选文本。最好使用jquery,但我不介意使用基本的javascript 提前谢谢 更新: 谢谢George,我已经尝试了您所指的示例,该示例将代码剥离到我所需的位置,但我无法让它在单击按钮时工作。只有当我将“添加章节”改为“文本区域”时,它才起作用。知道我的代码有什么问题吗?谢谢 <html> <head> <script type="text/javascript" src="jquery-latest.pac
<html>
<head>
<script type="text/javascript" src="jquery-latest.pack.js"></script>
<script type="text/javascript" src="jquery-fieldselection.js"></script>
<script type="text/javascript"><!--//--><![CDATA[//><!--
$(document).ready(function(){
$('#addchapter').click(update);
});
function update(e) {
var range = $(this).getSelection();
$('#output').html(
"selected text:\n<span class=\"txt\">" + ((true) ? range.text.whitespace() : range.text) + "</span>\n\n"
);
}
String.prototype.whitespace = (function() {
if (!RegExp.escape) {
RegExp.escape = (function() {
var specials = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\' ];
var sRE = new RegExp( '(\\' + specials.join('|\\') + ')', 'g' );
return function(text) { return text.replace(sRE, '\\$1') }
})();
}
var ws = { "\r\n": "¶", "\n": "¶", "\r": "¶", "\t": "»", " ": "·" };
return ($.browser.msie) ? function() {
var s = this;
$.each(ws, function(i){ s = s.replace(new RegExp(RegExp.escape(i), 'g'), this) });
return s;
} : function () {
var s = this;
$.each(ws, function(i){ s = s.replace(new RegExp(RegExp.escape(i), 'g'), this + "\u200b") });
return s;
}
})();
//--><!]]>
</script>
</head>
<body>
<pre id="output"></pre>
<textarea id="area1" name="area1">textarea: foo bar baz</textarea>
<input type="button" value="add" id="addchapter">
</body>
</html>
文本区域:富吧巴兹
更新2:
最后使用了这个-我相信这个问题有你想要的: 编辑: 这也可能证明是有用的(与该问题相关):
这个问题似乎很清楚,但代码却毫无关联,因此我将按照我理解的答案回答这个问题,而不是代码
deleteSelectedText()
函数将从您提供的
或
中删除所选文本,并返回已删除的文本
function getSelectionBoundary(el, start) {
var property = start ? "selectionStart" : "selectionEnd";
var originalValue, textInputRange, precedingRange, pos, bookmark, isAtEnd;
if (typeof el[property] == "number") {
return el[property];
} else if (document.selection && document.selection.createRange) {
el.focus();
var range = document.selection.createRange();
if (range) {
// Collapse the selected range if the selection is not a caret
if (document.selection.type == "Text") {
range.collapse(!!start);
}
originalValue = el.value;
textInputRange = el.createTextRange();
precedingRange = el.createTextRange();
pos = 0;
bookmark = range.getBookmark();
textInputRange.moveToBookmark(bookmark);
if (/[\r\n]/.test(originalValue)) {
// Trickier case where input value contains line breaks
// Test whether the selection range is at the end of the
// text input by moving it on by one character and
// checking if it's still within the text input.
try {
range.move("character", 1);
isAtEnd = (range.parentElement() != el);
} catch (ex) {
log.warn("Error moving range", ex);
isAtEnd = true;
}
range.moveToBookmark(bookmark);
if (isAtEnd) {
pos = originalValue.length;
} else {
// Insert a character in the text input range and use
// that as a marker
textInputRange.text = " ";
precedingRange.setEndPoint("EndToStart", textInputRange);
pos = precedingRange.text.length - 1;
// Delete the inserted character
textInputRange.moveStart("character", -1);
textInputRange.text = "";
}
} else {
// Easier case where input value contains no line breaks
precedingRange.setEndPoint("EndToStart", textInputRange);
pos = precedingRange.text.length;
}
return pos;
}
}
return 0;
}
function deleteSelectedText(el) {
var start = getSelectionBoundary(el, true);
var end = getSelectionBoundary(el, false);
var val = el.value;
var selectedText = val.slice(start, end);
el.value = val.slice(0, start) + val.slice(end);
return selectedText;
}
您好,我可以让它的一些,但不是所有的工作,看到我的问题更新。谢谢。@user201140你不知道,但我已经在调查了。我注意到这个问题已经出现在头版了。请看我对你的问题的评论。谢谢,我刚刚找到了另一个插件,我不确定是否有基于相同内容的插件。我把这个例子(包括按钮)缩减到我需要的程度,它看起来很有效。这只是一个猜测,但我认为您需要在脚本块的末尾引入偶数处理程序。IIRC,JavaScript在该块中读取时进行评估,而不是在包含外部文件的代码时读取整个文件。i、 e.移动
$(文档).ready(函数(){$('#addchapter')。单击(更新);})代码>到脚本块的末尾。您好,刚刚尝试过,但似乎不起作用。