Сообщение от x-yuri
|
если хочешь, можешь со мной поговорить
|
+1
Сообщение от Octane
|
Опыт разработки JavaScript WYSIWYG-редакторов далеко не у всех JavaScript-программистов есть
|
Да я (вроде) более менее частные примеры рассматривал.... А может просто мне уже это так кажется =)
Сообщение от Octane
|
Вот кстати, может сталкивались с такой проблемой:
|
Поигрался с твоим примером. Честно говоря в очередном шоке от IE. Правда, честно говоря, что createRange().text, что createRange().htmlText - абсолютно не нужные фичи. Во всяком случае у меня в редакторе они чисто для видимости присутствуют. Если есть createRange(), соответственно будет работать execCommand. А для всего остального нужно получать ссылки на объекты, с которыми хочешь произвести операции. Вот код чисто для примера:
<html>
<head>
<script language="javascript">
var init=function(){
document.onmouseup=function(){
var range=document.selection.createRange();
var buffer=range.text;
var curEl=(range.length>0)?range.item(0):range.parentElement();
var curTag=curEl.tagName;
var str='';
if(buffer)
str+='Выделен текст: '+buffer+"\n";
if(curTag)
str+='Текущий тэг: '+curTag+"\n";
if(range.length>0)
str+='Одиночный тэг';
else
str+='Содержимое тэга: '+curEl.innerHTML;
alert(str);
};
}
</script>
</head>
<body contenteditable="true" onload="init()">
<img src="mypicture.png" />
<hr />
<ul>
<li><a href="#">link</a></li>
</ul>
<table>
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
<td>Cell 3</td>
</tr>
</table>
</body>
</html>
Вся задача разрешается в этом маленьком участке кода
(range.length>0) ? range.item(0) : range.parentElement();
Собственно, если выделен одиночный тэг, в range появится элемент, доступ к которому можно получить через range.item(0). Честно подсмотрел в чужих примерах, сам бы фик когда догадался до этого!!!!
В ином случае мы вызываем функцию parentElement(), которая вернёт ссылку на объект родителя.