ورود

View Full Version : به دست آوردن موقعیت کرسر در div



emad_67
سه شنبه 27 بهمن 1388, 19:43 عصر
سلام
فرض کنید یه div داریم که contentEditable اون true هست.
می خوام موقعیت کرسر رو در داخل این div به دست بیارم و یه متن یا کد html ئی رو در اون قسمت وارد کنم. در واقع یه ادیتور خیلی ساده هست و چند تا smiley کنارش، که وقتی کاربر رو روی smiley ها کلیک می کنه اون smiley باید در اون موقعیت کرسر قرار بگیره. مثل ادیتور همین سایت.

مشکل هم فقط اینترنت اکسپلور هست که هرچی گشتم نتونستم کاریش کنم.

eAmin
چهارشنبه 28 بهمن 1388, 03:31 صبح
سلام.

این لینک رو ببینید:http://stackoverflow.com/questions/1181700/set-cursor-position-on-contenteditable-div/1279158#1279158
اگر کمی با کدها کار کنید می تونید همون چیزی رو که می خواید پیاده کنید، ولی پیشنهاد من به شما اینه که اگر وقعا ادیتوری که قصد ساختنش رو دارید به همین ساده گی که گفتید هست، بهتره بجای اینکار مثل ادیتورهای BBCode از Textarea استفاده کنید، کار کردن با textarea به مراتب ساده تر و بهینه تر هست.
مثال textarea:
http://forum.majidonline.com/showpost.php?p=522273&postcount=9
http://forum.majidonline.com/showthread.php?t=123306

موفق باشید.

emad_67
چهارشنبه 28 بهمن 1388, 15:20 عصر
خیلی ممنون جناب eAmin
بله کار با textarea راحتره اما من در واقع از یه ادیتور آماده دارم استفاده می کنم که می خوام اینکار رو روش انجام بدم.
اما به هر حال یه راهی براش پیدا کردم که توضیح می دم که یه کی دگیه این همه الاف این ie نشه.

ie تقریبا برای پیدا کردن موقعیت cursor توی editable div به هیچ صراطی مستقیم نمیشه.
توی google code یه اسکریپتی پیدا کردم به نام IERange که با اضافه کردن اون به صفحه میشه از توابع استاندارد w3c برای کار با range ها استفاده کرد. (ie از توابع خودش استفاده می کنه)


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<!--[if IE]>
<script type="text/javascript" src="ierange-m2-packed.js"></script>
<![endif]-->
<script type="text/javascript">
function getCursorPos(){
var ctn = document.getElementById("ctn");
if (navigator.userAgent.indexOf("MSIE") > 0)
ctn.focus();
var range = window.getSelection().getRangeAt(0);
alert(range.startOffset);
}
</script>
</head>
<body>
<div contenteditable="true" style="border: 1px solid #000" id="ctn">test string</div>
<br/>
<input type="button" value="ssss" onclick="getCursorPos();"/>
</body>
</html>

-------------------------


Implementation Support

Ranges:


document.createRange()
startContainer, startOffset, endContainer, endOffset, commonAncestorContainer, collapsed
setStart(), setEnd(), setStartBefore(), setStartAfter(), setEndBefore(), setEndAfter(), selectNode(), selectNodeContents(), collapse()
insertNode(), surroundContents()
extractContents(), cloneContents(), deleteContents()
compareBoundaryPoints(), cloneRange(), createContextualFragment(), toString()

Selection:


Range support (Webkit-style)
window.getSelection()
addRange(), removeAllRanges(), getRangeAt(), toString()

Not yet implemented:


DOM Exception throwing
detach()
Live range support (Mozilla-style), removeRange()

http://code.google.com/p/ierange/

فایل رو ضمیمه هم کردم.