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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование в буфер обмена, с передачей id текста 
:(
    Опции темы
Wolf1994
Дата 5.8.2005, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Как скопировать текст из тэйбла в буфер обмена, передав в функцию идентификатор тэйбла (или надо заключать текст в спан?)?

Нашёл вот такой код:
Код

<script language="javascript" type="text/javascript">

function copy_clip(whattext)

{ if (window.clipboardData) 

{window.clipboardData.setData("Text", whattext);}

else if (window.netscape) { 

 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

 var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);

 if (!clip) return;

 var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);

 if (!trans) return;

 trans.addDataFlavor('text/unicode');

 var str = new Object();

 var len = new Object();

 var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);

 var copytext=whattext;

 str.data=copytext;

 trans.setTransferData("text/unicode",str,copytext.length*2);

 var clipid=Components.interfaces.nsIClipboard;

 if (!clip) return false;

 clip.setData(trans,null,clipid.kGlobalClipboard);}

 return false;}

</script>   

<a href="#" onClick="return copy_clip('Тект который надо скопировать в буфер обмена')">Скопировать в клипбоард</a>


Пожалуйста, помогите модифицировать.
PM MAIL WWW   Вверх
Wolf1994
Дата 5.8.2005, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Спрошу проще:
"<table>"/"<span>" имеют id, допустим cl1,
я передаю его (id) функции:
Код

onClick="return copy_clip ('cl1')";

Вопрос - как в функции, по переданному id'у получить текст из "<table>"/"<span>"?
PM MAIL WWW   Вверх
Sardar
Дата 6.8.2005, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Wolf1994 содержимое элемента можно узнать через innerText для ИЕ, textContent для мозиллы. Только для таблиц немного глючно будет smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Иль
Дата 6.8.2005, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У текста не может быть id, покрайней мере его из HTML не задать.
Вот простое нестандартное, но всеми поддерживаемое решение
Код

function asa(){// функция-обработчик события для получения текста из ноды
var t;
t=document.getElementById('mytext');
t=t.innerText;
alert(t)
}
document.getElementById('mybutton').onclick=asa;// простейшее задание события

В t получин текст из ноды (из тэга где он лежит)

Не забывай про поиск, там это много раз поднималась и пролистай на досуге http://wdh.suncloud.ru/js01.htm и http://wdh.suncloud.ru/dhtml01.htm - тебе надо, чувствую совсем плаваеш!
Добавлено @ 01:17
Цитата(Sardar @ 6.8.2005, 00:56)
Wolf1994 содержимое элемента можно узнать через innerText для ИЕ, textContent для мозиллы

О как печально, я то не пользуюсь и думал, что innerText везде рулит.

М
 
Подредактировал пост. Иль, если есть вопросы, в приват;-)


Это сообщение отредактировал(а) Sardar - 6.8.2005, 01:39


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Wolf1994
Дата 6.8.2005, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Иль
Спасибо за код.

Цитата
У текста не может быть id, покрайней мере его из HTML не задать.


Странно, а у меня всё заработало с id в "<td>".

Цитата
Не забывай про поиск, там это много раз поднималась и пролистай на досуге http://wdh.suncloud.ru/js01.htm и http://wdh.suncloud.ru/dhtml01.htm - тебе надо, чувствую совсем плаваеш!


Спасибо. Обязательно посмотрю. Хотя предпочёл бы выражение - "тонешь" ;)

Цитата
Wolf1994 содержимое элемента можно узнать через innerText для ИЕ, textContent для мозиллы. Только для таблиц немного глючно будет


Никаких глюков не наблюдалось!
PM MAIL WWW   Вверх
Иль
Дата 6.8.2005, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Wolf1994 @ 6.8.2005, 09:56)
Странно, а у меня всё заработало с id в "<td>".

Дак id не тексту задается, а тегу в котором лежит текст. После того как браузер распарсит HTML получится нода TD с твоим id в которой лежит текстовая нода #text с твоим текстом в параметре .data


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Wolf1994
Дата 6.8.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Цитата
Дак id не тексту задается, а тегу в котором лежит текст. После того как браузер распарсит HTML получится нода TD с твоим id в которой лежит текстовая нода #text с твоим текстом в параметре .data

Я в этом плохо разбираюсь, поэтому выразился по-смыслу. Теперь буду знать.

И, ещё вопрос, по "<input type=text>": почему-то передача id от него не приводит к аналогичному срабатыванию функции. Искал по форуму, но за 10 минут ничего об этом не нашёл, поэтому прошу ответить или дать ссылку.
PM MAIL WWW   Вверх
Иль
Дата 6.8.2005, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Точно, я умолчал это
У этого элемента формы надо опрашивать точно также атрибут .value, потому что в DOM HTML у него не может быть childNodes (детей или вложенных нод по русски)
Код

var el , tx;
el=document.getElementById('mytext');
t=el.value;

Добавлено @ 14:45
тесть весь текст в нем помещается в атрибут VALUE


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Wolf1994
Дата 6.8.2005, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Всё. Разобрался. Всё работает - ok. Вот код:
Код

function copy_clip(obj)
{
 if (window.clipboardData) 
 {
  var whattext=document.getElementById(obj);
  if (whattext.innerText) {whattext=whattext.innerText;}
  else if (whattext.value) {whattext=whattext.value;}
  window.clipboardData.setData("Text", whattext);   
 }
}

Кстати, для этого форума тоже можно сделать копирование кода в буфер обмена под IE, а выделение оставить под остальные браузеры ;)

Большое спасибо и (+).
PM MAIL WWW   Вверх
Sardar
Дата 6.8.2005, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Wolf1994 Вобще это не верный подход к решению, функция копирует текст, следовательно текст нужно передавать. А потом можно сделать функцию, что будет выбирать контент по ИД в зависимости от типа элемента. Впрочем это замечание к стилю программинга, не к коду smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Иль
Дата 6.8.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Елки, + даже не ожидал, приятно smile.
А не хочеш это дело кроссбраузерно сделать через DOM?
Пишу для возможного случая с двойной вложенностью (глубже лучше не делать), что обычно в HTML, те когда имеем только один текст или когда идет текст и в нем встречаются стиливые тэги с текстом, например
Цитата
текст<i>еще текст</i>опять текст

К тому же не знаю точно, но из-за переносов строк в HTML может получится, что текст будет разбит на несколько текстовых нод
Код

var l='',u,e,el=document.getElementById(obj);
for(e=el.firstChild;e;e=e.nextSibling)// переберем все ноды пока они не кончатся, те пока e.nextSibling не вернет null
    if(e.nodeType==3){// если это текстовая нода
        l+=e.data?e.data:''// подстрахуемся от undefined в .data
    }else{// это не текстовая нода, попробуем и ее раскрутить на текст
        for(u=e.firstChild;u;u=u.nextSibling)// также переберем вложенные ноды
            if(u.nodeType==3)
                l+=u.data?u.data:''
    }

Wolf1994, извини, не проверяю, если что - пиши
Добавлено @ 17:06
Посмотрел в инспекторе DOM
Цитата
но из-за переносов строк в HTML может получится, что текст будет разбит на несколько текстовых нод

все нормально и ничего не разбивается, но лучше оставить как сделал я, тк если активно двигать нодами smile , то можно схлопотать разделенный на несколько нод один текст

Это сообщение отредактировал(а) Sardar - 6.8.2005, 17:31


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 6.8.2005, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Если на сбор инфы с нод времени нет, можно как уже говорил выше пользоваться innerText/textContent. Проще жить но не по стандарту. К сожалению стандарты редко идут в ногу со временем, потому почти все имплементации DOM имеют подобный механизм для выборки текста из поддерева.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Wolf1994
Дата 6.8.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Спасибо за пример. Я с этим случаем не сталкивался - у меня копируемый текст (код) идёт без переносов, а все тэги заменены на неисполняемые аналоги, во втором случае (с <input>) у меня самописные тэги, тоже без переносов. Но пример сохраню и, если столкнусь с описанной проблемой, обязательно применю.

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


 




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


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

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