Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2009, 06:48
Аватар для SashaBorandi
Интересующийся
Отправить личное сообщение для SashaBorandi Посмотреть профиль Найти все сообщения от SashaBorandi
 
Регистрация: 25.12.2008
Сообщений: 16

Не могу получить document.selection.createRange() при написании плагина
Написал плагин для 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);
		});
	  });
};
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск