Dưới đây là cách bạn có thể làm điều đó, trong tất cả các trình duyệt chính. Tôi cũng có một số jQuery plug-in bao gồm chức năng này. Cùng với đó, các mã sẽ
$("your_textarea_id").replaceSelectedText("NEW TEXT");
Dưới đây là một giải pháp độc lập đầy đủ:
function getInputSelection(el) {
var start = 0, end = 0, normalizedValue, range,
textInputRange, len, endRange;
if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
start = el.selectionStart;
end = el.selectionEnd;
} else {
range = document.selection.createRange();
if (range && range.parentElement() == el) {
len = el.value.length;
normalizedValue = el.value.replace(/\r\n/g, "\n");
// Create a working TextRange that lives only in the input
textInputRange = el.createTextRange();
textInputRange.moveToBookmark(range.getBookmark());
// Check if the start and end of the selection are at the very end
// of the input, since moveStart/moveEnd doesn't return what we want
// in those cases
endRange = el.createTextRange();
endRange.collapse(false);
if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
start = end = len;
} else {
start = -textInputRange.moveStart("character", -len);
start += normalizedValue.slice(0, start).split("\n").length - 1;
if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
end = len;
} else {
end = -textInputRange.moveEnd("character", -len);
end += normalizedValue.slice(0, end).split("\n").length - 1;
}
}
}
}
return {
start: start,
end: end
};
}
function replaceSelectedText(el, text) {
var sel = getInputSelection(el), val = el.value;
el.value = val.slice(0, sel.start) + text + val.slice(sel.end);
}
var el = document.getElementById("your_textarea");
replaceSelectedText(el, "[NEW TEXT]");
Nguồn
2010-10-19 09:10:38
Các thuộc tính 'selectionStart' và' selectionEnd' của 'textarea' của bạn hoặc' input' là tất cả bạn cần ngày nay. Kết hợp với phương thức 'slice' trên giá trị của phần tử đầu vào. – caw