ну тогда точно придется заморачиваться с textrange.
вот и исходник. найдешь много полезных функций. писал для ие.
| Код |
// filename TextObject.js
// JSman
window.attachEvent("onload", TextObject);
function TextObject() { var _ = new Object(); // var _ = this; /* properties: lastElement - last activated element methods: insert(text[, element]) - adding text at TextRangePos of editable element; storeTextRange (element) - storing TextRange position in editable element; register([wnd]) registerAll() getWordAtCursor() */
//-property----------------------------- _.lastElement = null; //-methods----------------------------- _.insert = TextObject_insert; _.storeTextRange = TextObject_storeTextRange; _.register = TextObject_register; _.registerAll = TextObject_registerAll; _.getWordAtCursor = TextObject_getWordAtCursor;
function constructor() { _.registerAll(); }
constructor(); //--------------------------------- function addWord () { var s, el=event.srcElement.innerText, e; s = (el.indexOf(' ') != -1)? '"' + el + '"' : el; _.insert(' ' + s + ' '); try { if (_.lastElement) _.lastElement.focus(); } catch (e) {} }
//-------------------------------- /*function TextObject_window_frame_register_onload( _wnd, _id) { //_wnd.document.all(_id).attachEvent("onload", function () {_.register(_wnd.document.frames(_id));}); } */ //-------------------------------- function TextObject_register() { var i=0, el, doc, wnd;
function getEvent() { _.storeTextRange(wnd, wnd.event.srcElement); //_.getWordAtCursor(wnd); } function anchor_click() { el = wnd.event.srcElement; //document.title = el.tagName == "A" && el.parentElement.className == "addword"; if (el.tagName == "A" && el.parentElement.className == "addword") addWord(); }
if (arguments.length>0) wnd = arguments[0]; else wnd = window; doc = wnd.document; //alert(); doc.attachEvent ("onclick", anchor_click); //alert(); doc.attachEvent ("onselect", getEvent );
while (i<doc.all.length) { el = doc.all.item(i);
///* if (el.isContentEditable || el.className == "editable") { el.attachEvent('onclick', getEvent); el.attachEvent('onselect', getEvent); el.attachEvent('onkeyup', getEvent); } /* if (el.tagName=="IFRAME") { //alert(el.id); if (!el.id) el.id = "ID_FRAME_"+i.toString(); if (!el.name) el.name = "ID_FRAME_"+i.toString(); } // */ i++; }
return; } //------------------------------------------------------------ function TextObject_registerAll() {
var wnd, frame, collection, i=0;
if (arguments.length) wnd = arguments[0]; else wnd = window;
collection = wnd.document.all.tags("IFRAME")
_.register();
///* if (collection.length>0) { while (i<collection.length){ frame = collection.item(i); _.register(frame.contentWindow); //_.register(wnd.frames.item(i)); //frame.attachEvent("onload", function () {_.register(frame.contentWindow);}); frame.attachEvent("onload", new Function ('_.register(frame.contentWindow);')); //TextObject_window_frame_register_onload(window, frame.id); i++; } } //*/ } //------------------------------------------------------------ function TextObject_insert(){ var el, txt, e; if (arguments.length==0) return; if (arguments.length>0) txt = arguments[0]; if (arguments.length>1) el = arguments[1]; else el = _.lastElement; try { if (el && el.TextRangePos) { // alert(el.TextRangePos); el.TextRangePos.text=txt; el.TextRangePos.collapse(false); el.TextRangePos.select(); } else if (el) {el.value+=txt; } } catch(e) {} }
//------------------------------------------------------------ function TextObject_storeTextRange(wnd,el) { var e; if (wnd.document.selection && wnd.document.selection.createRange) { try { el.TextRangePos=wnd.document.selection.createRange().duplicate(); _.lastElement = el; } catch (e) {} } } //------------------------------------------------------------
function TextObject_getWordAtCursor() { ///* var word, o; //word.text = ''; if (arguments.length ==1) wnd = arguments[0]; o = wnd.event.srcElement; //alert(); try { word = o.TextRangePos.duplicate(); //alert(); word.moveStart('word',-1); word.moveEnd('word'); } catch (e) {word = new Object(); word.text=''; }; //document.title = ('\" ' + word.text + '\"'); //*/ return word.text; }
//----------------------------------------------------------- }
|
смысл кода был в том, что я сначала активирую текстовое поле, потом кликаю на ссылку с class "addword" и вставляется текст ссылки в поле ввода. легко изменить код под себя. |