Показать сообщение отдельно
  #7 (permalink)  
Старый 26.05.2009, 22:50
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

Сообщение от 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(), которая вернёт ссылку на объект родителя.
Ответить с цитированием