Получение выделенного текста
Январь 16th, 2008 by mAd
Столкнулся с такой задачей, нужно получить координаты выделенного текста в textarea.
В Mozilla всё проще простого selectionStart и selectionEnd. В IE это, как и ожидалось, не работает. Но нужна кросбраузерность.
Порыскав немного по нету, нашёл подходящий код (свой собственный мне не понравился).
function Selection(textareaElement) {
this.element = textareaElement;
}
Selection.prototype.create = function() {
if (document.selection != null && this.element.selectionStart == null) {
return this._ieGetSelection();
} else {
return this._mozillaGetSelection();
}
}
Selection.prototype._mozillaGetSelection = function() {
return {
start: this.element.selectionStart,
end: this.element.selectionEnd
};
}
Selection.prototype._ieGetSelection = function() {
this.element.focus();
var range = document.selection.createRange();
var bookmark = range.getBookmark();
var contents = this.element.value;
var originalContents = contents;
var marker = this._createSelectionMarker();
while(contents.indexOf(marker) != -1) {
marker = this._createSelectionMarker();
}
var parent = range.parentElement();
if (parent == null || parent.type != "textarea") {
return { start: 0, end: 0 };
}
range.text = marker + range.text + marker;
contents = this.element.value;
var result = {};
result.start = contents.indexOf(marker);
contents = contents.replace(marker, "");
result.end = contents.indexOf(marker);
this.element.value = originalContents;
range.moveToBookmark(bookmark);
range.select();
return result;
}
Selection.prototype._createSelectionMarker = function() {
return "###SM_" + Math.random() + "###";
}
Юзается очень просто:
var selection = new Selection(document.getElementById("textArea"));
var sel = selection.create();
sel.start;// начало выделения
sel.end;//конец выделения
Работает в IE 6 Mozilla 2.x Oper9.2 и выше. Как с остальными, не проверял.
Да, ещё, следите за тем чтобы при event не терялось выделение (например <span onclick=”sel()”>click<span> в IE начало и конец выделения будут одинаковы);
PS. код класса не мой. я его нашёл в инете, к сажеленью адрес ресурса и контакты автора не сохранились ![]()
Posted in javascript
RSS
Август 18th, 2008 at 15:17
Спасиб, очень помогла статейка