Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа c range объектами 
:(
    Опции темы
getme
Дата 18.8.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 12.9.2008

Репутация: нет
Всего: -2



есть несколько функций по работе с рэнджами

Код

this.getRangeObject  = function(selectionObject) {
     if ( selectionObject.getRangeAt )
      return selectionObject.getRangeAt(0);
     else if ( document.selection ) { // IE
      return document.selection.createRange();
     } else { // Safari!
      var range = document.createRange();
      range.setStart(selectionObject.anchorNode, selectionObject.anchorOffset);
      range.setEnd(selectionObject.focusNode, selectionObject.focusOffset);
      return range;
     }
    };


// get user selection
    this.getUserSelection        = function() {
        var userSelection;
        if (window.getSelection) {
            userSelection = window.getSelection();
        } else if (document.selection) { // Opera!
            userSelection = document.selection.createRange();
        }
        
        var selectedText = userSelection;
        // Handle IE
        if (userSelection.text) {
            selectedText = userSelection.text;
        }
        
        return selectedText;
    };

      this.getSelectedFragment  = function () {
        var selection    = this.getUserSelection();
        var range        = this.getRangeObject(selection);
        
        var html;
        if (  range.htmlText ) { // IE
            html        = range.htmlText;
        } else { // Mozilla
            var elem = document.createElement('div');
            elem.appendChild(range.cloneContents());
            html        = elem.innerHTML;
        }
            
        return html;
    };


вызывая this.getSelectedFragment() я получаю html source выделенной области, вроде раьотает во всех браузераз
далее, мне надо получить общего анчестора, получил вот такой код, правда незнаю насколько кросс-браузерно?

Код

this.getRangeAncestor  = function(rangeObject) {
        var rootNode;
        if ( rangeObject.commonAncestorContainer ) { // w3
            rootNode    = rangeObject.commonAncestorContainer;
        } else if ( rangeObject.parentElement() ) { // ie
            rootNode    = rangeObject.parentElement();
        }
        
        // if text node, get parent
        if ( rootNode.nodeType == 3 ) {
            rootNode        =  rootNode.parentNode;
        }
        
        return rootNode;
    };



ну и самое последнее что нужно сделать, это - как получить document.body с только выделенной областью? незнаю как правильно объяснить
покажу пример

скажем есть такой html

Код

<body>
   <h1>Hefing</h2>
  <table>
  <tr>
     <td>cell1</td>
     <td>cell2</td>
   </tr>
  <table>
</body>





к примеру я выделяю тест "ell2" во второй ячейки таблицы

Код

<body>
   <h1>Hefing</h2>
  <table>
  <tr>
     <td>cell1</td>
     <td>cell2</td>
   </tr>
  <table>
</body>



как получить вот такую штуку?

Код

<body>
  <table>
  <tr>
     <td>ell</td>
   </tr>
  <table>
</body>



Если кто поделится мыслями буду рад, спасибо
PM MAIL   Вверх
getme
Дата 19.8.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 12.9.2008

Репутация: нет
Всего: -2



мм.. неужели никто ничем не поделится?
PM MAIL   Вверх
Michael.de
Дата 21.8.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



getme, а как такая мысль:
1. цепляем на каждую ячейку таблицы onmousedown() и onmouseup()
2. помечаем текст (кликнули по тексту мышью, сдвинули её в сторону и отпустили. Оба события должны принадлежать одной ячейке!)
--> имеем элемент и помеченный текст --> для элемента находим родителей. Всё smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.