Insert text vào textarea và giữ nguyên vị trí con trỏ 2007-07-19 19:17:18
Đoạn code này dùng để chèn 1 đoạn text vào ô textare mà vẫn giữ được vị trí hiện tại của con trỏ trên textarea.
<script>
function BASIC_InsertTag(tagOpen, tagClose, sampleText) {
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
&& (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
var areas = document.getElementsByTagName('textarea');
var txtarea = areas[0];
if (document.selection && !is_gecko) {
var theSelection = document.selection.createRange().text;
if (!theSelection) {
theSelection=sampleText;
}
txtarea.focus();
if (theSelection.charAt(theSelection.length - 1) == " ") { // exclude ending space char, if any
theSelection = theSelection.substring(0, theSelection.length - 1);
document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
} else {
document.selection.createRange().text = tagOpen + theSelection + tagClose;
}
// Mozilla
} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
var replaced = false;
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
if (endPos-startPos) {
replaced = true;
}
var scrollTop = txtarea.scrollTop;
var myText = (txtarea.value).substring(startPos, endPos);
if (!myText) {
myText=sampleText;
}
var subst;
if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any
subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
} else {
subst = tagOpen + myText + tagClose;
}
txtarea.value = txtarea.value.substring(0, startPos) + subst +
txtarea.value.substring(endPos, txtarea.value.length);
txtarea.focus();
if (replaced) {
var cPos = startPos+(tagOpen.length+myText.length+tagClose.length);
txtarea.selectionStart = cPos;
txtarea.selectionEnd = cPos;
} else {
txtarea.selectionStart = startPos+tagOpen.length;
txtarea.selectionEnd = startPos+tagOpen.length+myText.length;
}
txtarea.scrollTop = scrollTop;
}
if (txtarea.createTextRange) {
txtarea.caretPos = document.selection.createRange().duplicate();
}
}</script>
<form id="form1" name="form1" method="post" action="">
<textarea name="textfield" id="textfield"></textarea>
<a href="javascript:BASIC_InsertTag('', '', 'In đậm');">Insert B</a>
</form>
<script>
function BASIC_InsertTag(tagOpen, tagClose, sampleText) {
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
&& (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
var areas = document.getElementsByTagName('textarea');
var txtarea = areas[0];
if (document.selection && !is_gecko) {
var theSelection = document.selection.createRange().text;
if (!theSelection) {
theSelection=sampleText;
}
txtarea.focus();
if (theSelection.charAt(theSelection.length - 1) == " ") { // exclude ending space char, if any
theSelection = theSelection.substring(0, theSelection.length - 1);
document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
} else {
document.selection.createRange().text = tagOpen + theSelection + tagClose;
}
// Mozilla
} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
var replaced = false;
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
if (endPos-startPos) {
replaced = true;
}
var scrollTop = txtarea.scrollTop;
var myText = (txtarea.value).substring(startPos, endPos);
if (!myText) {
myText=sampleText;
}
var subst;
if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any
subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
} else {
subst = tagOpen + myText + tagClose;
}
txtarea.value = txtarea.value.substring(0, startPos) + subst +
txtarea.value.substring(endPos, txtarea.value.length);
txtarea.focus();
if (replaced) {
var cPos = startPos+(tagOpen.length+myText.length+tagClose.length);
txtarea.selectionStart = cPos;
txtarea.selectionEnd = cPos;
} else {
txtarea.selectionStart = startPos+tagOpen.length;
txtarea.selectionEnd = startPos+tagOpen.length+myText.length;
}
txtarea.scrollTop = scrollTop;
}
if (txtarea.createTextRange) {
txtarea.caretPos = document.selection.createRange().duplicate();
}
}</script>
<form id="form1" name="form1" method="post" action="">
<textarea name="textfield" id="textfield"></textarea>
<a href="javascript:BASIC_InsertTag('', '', 'In đậm');">Insert B</a>
</form>
Tra loi 12 comment(s) 2007-07-19 19:17:18
love 2007-09-25 08:47:49
[indam]_contro_[/indam]
Tra loi
TG 2007-09-26 02:45:17
Tra loi
Khắc Qui 2007-10-05 10:12:02
Thật may là em đang tìm cái code Javascript như thế này và đã bắt gặp đúng cái mình cần. Em dùng cái này để click vào một image và đồng thời insert một ký tự tương ứng vào Textarea.
Rất tuyệt, thanhs anh TG nhiều, hy vọng được tiếp cận nhiều bài viết khác nữa.
Tra loi
K Qui 2007-10-19 03:21:03
Tra loi
TG 2007-10-19 03:22:47
Tra loi
diendan113 2008-02-27 08:30:06
var areas = document.getElementsByTagName('textarea');
và thay bằng dòng này:
var areas = document.getElementsByTagName('input');
nói chung bạn có thể cho vào bất cứ thứ gì bạn muốn.
Tra loi
diendan113 2008-02-27 08:32:19
Tra loi
gaulucky92 2008-03-24 11:23:07
Vậy mong TG fix code lại cho thích hợp để chèn được vào <DIV> nha. Thanks.
Tra loi
Share BBcode source 2008-11-24 10:22:00
Khi mình nhập vào dạng BBcode rồi thì có 1 button bấm vào thì nó tự động chuyển sang dạng format hoàn chỉnh luôn như là: chữ đậm => <b>chữ đậm</b>
Tra loi
gaulucky92 2008-11-24 10:44:36
- plain-text: chỉ là textarea đơn thuần
- bbcode: textarea với các nút lệnh bbcode. bbcode hiện ra dạng [BBCODE][/BBCODE]
- wysiwyg: cao cấp nhất đây! Đây là cái bạn nói tới :D
Có lẽ bộ wysiwyg của vbb là đã nhất (gọn nhẹ mà đầy đủ). Bạn có thể tìm dc rất nhiều bộ wysiwyg free lẫn fee :D như NicEdit (http://nicedit.com/) có chức năng đơn giản -> free; còn Innova Studio WYSIWYG là bộ editor chuyên nghiệp (tương đương MS WORD, có khi còn hơn ấy chứ), chức năng khủng bố... giá cũng trên trời: 70 USD :D
Tra loi
noob 2009-09-30 01:28:32
Tra loi
KK 2010-04-08 11:26:40
Tra loi
Y kien