| Как я понял задачу, вы выделяете мышью какой-то участок HTML-страницы и затем хотите получить через буфер "исходный код выделенного вами фрагмента страницы" (и уже из этого HTML-кода хотите "вытаскивать" src картинок).
Эта фича ("получение HTML-кода выделенного фрагмента на странице") реализована в браузере FF - там можно выделить что-угодно на странице (картинки вместе с текстом), затем правой кнопкой мыши вызвать контекстное меню, в котором есть пункт "Просмотр исходного кода выделенного вами фрагмента страницы", клик по которому вызывает открытие встроенного в FF текстового редактора, в котором и виден код фрагмента - обычно он, если маленький по размеру, показывается только как этот фрагмент кода; если велик, то показывается весь код страницы, а код, соответствующий содержанию, выделенному на странице, показан выделенным (синий фон, белый шрифт).
Я правильно понял вашу задачу?
Если правильно, то скажу сразу: решение эта задача ИМЕЕТ, но только не напрямую через использование буфера.
Ибо в буфере одновременно могут находиться только данные одного типа - или только текст (практически любого объёма - зависит от свободной на этот момент оперативной памяти), или только картинка (причём всегда одна). Т.е. буфер здесь просто НЕ ПОЛУЧИТСЯ использовать.
Реализация задачи в браузере MSIE (и Opera) не просто сложна, но ОЧЕНЬ СЛОЖНА. Сделать можно, наверно, ещё и под FF, но смысла особого не вижу - ибо реализовано это в самом движке.
Принцип решения следующий:
1. Получаете innerHTML документа (т.е. тега <html>)
2. Вытаскиваете из него ТЕКСТ документа, при этом не тупо парсите HTML-код, отбрасывая теги и оставляя только текст, а пытаетесь сопоставить текст структуре страницы.
Это самая сложная часть работы, потому остановлюсь подробнее.
Представьте себе страницу из двух дивов, расположенных вертикально, т.е. так:
+------------+---------------+
| | |
| Див_1 | Див_2 |
| aaaaa | 11111 |
| bbbbb | 22222 |
| ccccc | 33333 |
+------------+---------------+
|
В HTML-коде эта страница будет выглядеть так:
<div style="float: left">Див_1<br>aaaaa<br>bbbbb<br>ccccc</div>
<div style="float: right">Див_2<br>11111<br>22222<br>33333</div>
|
Если "тупо" вытащите текст страницы из кода, то получите следующую последовательность слов:
Див_1 aaaaa bbbbb ccccc Див_2 11111 22222 33333
|
А при выделении мышью последовательность слов текста у вас будет совсем иная, сравните с предыдущим текстом:
Див_1 Див_2 aaaaa 11111 bbbbb 22222 ccccc 33333
|
Мысль поняли?
Это я к тому, что соответствие между текстом HTML-кода и текстом выделенного напрямую определить весьма трудно - порядок представления текста на странице из-за форматирования страницы очень редко совпадает с порядком текста HTML-кода.
Так вот, если решите эту локальную задачу, т.е. из HTML-кода каким-то образом получите текст в той последовательности, в какой он и будет отображаться на странице, то, считайте, что общая задача уже решена: ищете место совпадения первого выделения с местом в HTML-коде и, соответственно, место последнего совпадения - этот HTML-код и "вываливаете" для последующей обработки (т.е. вытаскиваете оттуда всё что вам угодно, в т.ч. и src картинок)
Подсказываю, повторяясь, - эта задача решена для браузера FF, причём решена именно средствами JS. Коды FF открыты и имеются у вас на компьютере (если там установлен FF).
Пошукайте там и реализованное решение для FF обнаружите - после вам придется только адаптировать это решение под другие браузеры.
PS. Я давным-давно решАл эту задачу для MSIE (когда браузера FF ещё просто не было в природе). И решение (вроде как и работающее даже) где-то у меня на каком-то из компов есть... Но вам вряд ли это поможет, даже если найду этот файл.
Решение там содержит где-то порядка трёх (а то и - четырёх) тысяч строк JScript-кода.
Вряд ли вы ожидали такого, и к этому готовы и вряд ли будете в таком огромном чужом коде разбираться... "я так думаю!"(с)
PS2. Кстати, вспомнил, что решал я эту задачу и ещё раз, но принципиально иным способом (а не тем что изложен выше) - я отслеживал процесс выделения мышью, запуская код через onselectstart, начав запись абсолютных координат мыши по onselectionchange. Ну а по завершению выделения записанный массив координат сопоставлял с абсолютными координатами ВСЕХ объектов страницы и запоминал объекты, через которые мышь проходила, и вот их outerHTML выдавал для обработки. Но там тоже только для IE и код тоже сложен и велик, ибо мышью можно двигать только по одному краю страницы (и даже где-то посередине, и вверх и вниз, и возвращаясь...) да и на любом этапе можно выделение продолжить, используя клавиатуру - Шифт и стрелки... | |