Почему скрипт работает в IE6 и не работает в opera и IE8?
function createLink() { if (!validateMode()) return; var isA = getEl("A",document.getElementById('Composition')[].contentWindow.selection.createRange().parentElement()); var str=prompt("Введите адрес:", isA ? isA.href : "http:\/\/"); if ((str!=null) && (str!="http://")) { if (document.getElementById('Composition')[].contentWindow.selection.type=="None") { Composition.focus(); var sel=document.getElementById('Composition')[].contentWindow.selection.createRange(); sel.pasteHTML("<A HREF=\""+str+"\">"+str+"</A> "); sel.select(); } else formatC("CreateLink",str); } else document.getElementById('Composition')[].focus(); } function createBR() { if (!validateMode()) return; var sel=document.getElementById('Composition').selection.createRange(); sel.pasteHTML("<br>"); sel.select(); Composition.focus(); } <table border="1" cellpadding="0" cellspacing="0" width="100%" bordercolor='#C0C0C0' bordercolordark='#FFFFFF'><tr><td> <IFRAME class=Composition id=Composition width="100%" height=400 frameborder=0 name="Composition"> </IFRAME> </td></tr></table> Пробовал менять Composition.document.selection.createRange();на document.getElementById('Composition').selection.c reateRange(); Результата ни какого. |
Геттер selection есть у объекта document, а не window.
По событию focus IE сбрасывает выделение. Для других браузеров лучше использовать w3c-методы, подробнее здесь: http://fastcoder.org/articles/?aid=609 И не дублируйте темы. |
Спасибо за ответ и ссылочку.
Извиняюсь за дублёж, не знал как перепостить тему в другой раздел. По сути вопроса: изначально было так Composition.document.selection.createRange() Теперь попробую реализовать рекомендованными методами. |
var iframe = document.getElementById("Composition"); var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; var sel = iframeDocument.selection; … |
Для простоты пробую на функции createBR()
Мне кажется, что не происходит вставки HTML кода sel.pasteHTML("<br>"); Результат работы функции в Опере нулевой. function createBR() { if (!validateMode()) return; var iframe = document.getElementById("Composition"); var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; var sel = iframeDocument.selection; sel.pasteHTML("<br>"); sel.select(); iframe.focus(); } Например пример, приведённый ниже, работает. function formatC(what,opt) { if (!validateMode()) return; if (opt=="removeFormat") { what=opt; opt=null; } Composition.focus(); if (opt==null) Composition.document.execCommand(what); else Composition.document.execCommand(what,"",opt); pureText = false; Composition.focus(); } <DIV language=javascript class=cout title=Жирный onclick="formatC('bold');"><IMG class=Ico src="images/bold.gif"> </DIV> |
pasteHTML — метод объекта TextRange, а не selection
function createBR() { if(!validateMode()) return; var iframe = document.getElementById("Composition"); var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; var sel, range; if(браузер Internet Explorer) { sel = iframeDocument.selection; range = selection.createRange(); range.pasteHTML("<br>"); … } else { // для остальных браузеров } } |
Читаю Вставка кода в текстовые поля для прочих браузеров, кроме ИЕ.
Только код слишком здоровый,вместо строчки в ИЕ. |
Часовой пояс GMT +3, время: 14:25. |