Написал плагин для jQuery, для вставки тегов в textarea..
Все работает, кроме одной функции в IE.. При выделении декста в textarea должы вставляться теги обтекая выделение. Но почемуто sel = document.selection.createRange(); не получает выделение.. Как быть?
Привожу код:
jQuery.fn.addtag = function(options){
var options = jQuery.extend({
id: '',
codTag: '0'
}, options);
var edButtons = new Array();
var edOpenTags = new Array();
function edButton(id, tagStart, tagEnd) {
this.id = id;
this.tagStart = tagStart;
this.tagEnd = tagEnd;
};
edButtons[edButtons.length] = new edButton(
'ed_b',
'<b>',
'</b>'
);
edButtons[edButtons.length] = new edButton(
'ed_i',
'<i>',
'</i>'
);
edButtons[edButtons.length] = new edButton(
'ed_u',
'<u>',
'</u>'
);
function edCheckOpenTags(codTag) {
var tag = 0;
for (i = 0; i < edOpenTags.length; i++) {
if (edOpenTags[i] == codTag) {
tag++;
};
};
if (tag > 0) {
return true;
} else {
return false;
};
};
function edAddTag(codTag) {
if (edButtons[codTag].tagEnd != '') {
edOpenTags[edOpenTags.length] = codTag;
};
};
function edRemoveTag(codTag) {
for (i = 0; i < edOpenTags.length; i++) {
if (edOpenTags[i] == codTag) {
edOpenTags.splice(i, 1);
};
};
};
function insertTag(id, codTag){
var element = document.getElementById(id);
//if (document.selection) {
if (jQuery.browser.msie) {
element.focus();
var sel = document.selection.createRange();
alert(sel.text);
if (sel.text.length > 0) {
sel.text = edButtons[codTag].tagStart + sel.text + edButtons[codTag].tagEnd;
} else {
if (!edCheckOpenTags(codTag) || edButtons[codTag].tagEnd == '') {
sel.text = edButtons[codTag].tagStart;
edAddTag(codTag);
} else {
sel.text = edButtons[codTag].tagEnd;
edRemoveTag(codTag);
}
};
element.focus();
} else if (element.selectionStart || element.selectionStart == '0') {
var startPos = element.selectionStart;
var endPos = element.selectionEnd;
var cursorPos = endPos;
var scrollTop = element.scrollTop;
if (startPos != endPos) {
element.value = element.value.substring(0, startPos)
+ edButtons[codTag].tagStart + element.value.substring(startPos, endPos)
+ edButtons[codTag].tagEnd + element.value.substring(endPos, element.value.length);
cursorPos += edButtons[codTag].tagStart.length + edButtons[codTag].tagEnd.length;
} else {
if (!edCheckOpenTags(codTag) || edButtons[codTag].tagEnd == '') {
element.value = element.value.substring(0, startPos) + edButtons[codTag].tagStart
+ element.value.substring(endPos, element.value.length);
edAddTag(codTag);
cursorPos = startPos + edButtons[codTag].tagStart.length;
} else {
element.value = element.value.substring(0, startPos) + edButtons[codTag].tagEnd
+ element.value.substring(endPos, element.value.length);
edRemoveTag(codTag);
cursorPos = startPos + edButtons[codTag].tagEnd.length;
};
};
element.focus();
element.selectionStart = cursorPos;
element.selectionEnd = cursorPos;
element.scrollTop = scrollTop;
} else {
if (!edCheckOpenTags(codTag) || edButtons[codTag].tagEnd == '') {
element.value += edButtons[codTag].tagStart;
edAddTag(codTag);
} else {
element.value += edButtons[codTag].tagEnd;
edRemoveTag(codTag);
}
element.focus();
};
};
return this.each(function() {
$(this).click(function() {
insertTag(options.id, options.codTag);
});
});
};