Почему скрипт работает в 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, время: 11:48. |