История изменений
Исправление ii343hbka, (текущая версия) :
<html>
<head>
<script>
function magic(object) {
var textComponent = object;
var textArray = textComponent.value.split("\n");
var selectedText, selStartPos, selEndPos;
if (textComponent.selectionStart != undefined) {
var selStartPos = textComponent.selectionStart;
var selEndPos = textComponent.selectionEnd;
}
if( (selStartPos + selEndPos) == 0 ) return;
// start && end
var modStartPos = 0;
var modEndPos = 0;
for( var i = 0, tl = 0; i < textArray.length; i++ ) {
tl += textArray[i].length;
if( (tl) <= selStartPos ) { modEndPos = modStartPos = i; }
if( (tl) >= selEndPos ) { modEndPos = i; break; }
}
alert("start && end = "+modStartPos+" && "+modEndPos+"");
}
</script>
</head>
<body>
<textarea id="ta" name="ta" onMouseUp="magic(this)">
lognglognglognglognglognglognglognglognglogng
lognglognglognglognglognglogng
shortshortshort
a a
a
</textarea>
</body>
</html>
есть косяк - не ловит стык строк, т.е. если выбираешь от начала первой до конца второй, он считает как от 0 до 3
если доделать условия, то заработает
может правильнее будет не в одном цикле считать, а в двух
Исправление ii343hbka, :
<html>
<head>
<script>
function magic(object) {
var textComponent = object;
var textArray = textComponent.value.split("\n");
var selectedText, selStartPos, selEndPos;
if (textComponent.selectionStart != undefined) {
var selStartPos = textComponent.selectionStart;
var selEndPos = textComponent.selectionEnd;
}
if( (selStartPos + selEndPos) == 0 ) return;
// start && end
var modStartPos = 0;
var modEndPos = 0;
for( var i = 0, tl = 0; i < textArray.length; i++ ) {
tl += textArray[i].length;
if( (tl) <= selStartPos ) { modEndPos = modStartPos = i; }
if( (tl) >= selEndPos ) { modEndPos = i; break; }
}
alert("start && end = "+modStartPos+" && "+modEndPos+"");
}
</script>
</head>
<body>
<textarea id="ta" name="ta" onMouseUp="magic(this)">
lognglognglognglognglognglognglognglognglogng
lognglognglognglognglognglogng
shortshortshort
a a
a
</textarea>
</body>
</html>
есть косяк - не ловит стык строк, т.е. если выбираешь от начала первой до конца второй, он считает как от 0 до 3
если доделать условия, то заработает
Исходная версия ii343hbka, :
<html>
<head>
<script>
function magic(object) {
var textComponent = object;
var textArray = textComponent.value.split("\n");
var selectedText, selStartPos, selEndPos;
if (textComponent.selectionStart != undefined) {
var selStartPos = textComponent.selectionStart;
var selEndPos = textComponent.selectionEnd;
}
if( (selStartPos + selEndPos) == 0 ) return;
// start && end
var modStartPos = 0;
var modEndPos = 0;
for( var i = 0, tl = 0; i < textArray.length; i++ ) {
tl += textArray[i].length;
if( (tl) <= selStartPos ) { modEndPos = modStartPos = i; }
if( (tl) >= selEndPos ) { modEndPos = i; break; }
}
alert("start && end = "+modStartPos+" && "+modEndPos+"");
}
</script>
</head>
<body>
<textarea id="ta" name="ta" onMouseUp="magic(this)">
lognglognglognglognglognglognglognglognglogng
lognglognglognglognglognglogng
shortshortshort
a a
a
</textarea>
</body>
</html>
есть косяк - не ловит стык строк, т.е. если выбираешь от начала первой до конца второй, он считает как от 0 до 3