Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Удаление тегов со страницы
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Удаление тегов со страницы

Страниц (1): [1]
 

1. Albertino - 30 Ноября, 2011 - 15:05:11 - перейти к сообщению
есть страница,например
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2.  
  3. <head>
  4.   <title></title>
  5. </head>
  6.  
  7. <body>
  8. <a href=""><b>link 1</b></a>
  9. <a href=""><i>link 2</i></a>
  10. <a href="">link 3</a>
  11. <a href="">link 4</a>
  12. <a href="">link 5</a>
  13. <a href="">link 6</a>
  14. </body>
  15.  
  16. </html>

как удалить все теги <a>(на javascript), чтоб при этом "внутренность" тега осталась или заменить, например, <a href=""><b>link 1</b></a> на <b>link 1</b>, те должно в результате быть:
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2.  
  3. <head>
  4.   <title></title>
  5. </head>
  6.  
  7. <body>
  8. <b>link 1</b>
  9. <i>link 2</i>
  10. link 3
  11. link 4
  12. link 5
  13. link 6
  14. </body>
  15.  
  16. </html>

пробовал с помощью DOM:
CODE (javascript):
скопировать код в буфер обмена
  1. var elements = document.getElementsByTagName("a");
  2. for(var i=0;i<=elements.length-1;i++){
  3. elements[i].parentNode.removeChild(elements[i]);
  4. }

но он удаляет весь тег вместе со внутренностями
2. Ch_chov - 30 Ноября, 2011 - 15:49:56 - перейти к сообщению
Интересно, а зачем это понадобилось? Почему обязательно javascript?
3. Albertino - 30 Ноября, 2011 - 16:03:44 - перейти к сообщению
Ch_chov пишет:
Интересно, а зачем это понадобилось? Почему обязательно javascript?

Там такие замуты
нужно в из "версии для печати" убрать ссылки, оставить только текст ссылки, если делать не на js, то придется править туевухучу шаблонов(и все это ручками), вот чтоб этого не делать надо сделать на js, чтоб после загрузки страници на js резлись теги <a> и </a>
4. Ch_chov - 30 Ноября, 2011 - 16:19:11 - перейти к сообщению
Проще просто скрыть их через CSS.
5. Albertino - 30 Ноября, 2011 - 16:30:08 - перейти к сообщению
Ch_chov пишет:
Проще просто скрыть их через CSS.

проще, не проще главное как?

А решалось все довольно просто
CODE (javascript):
скопировать код в буфер обмена
  1. var str = document.body.innerHTML;
  2. str.replace(/<a[^>]*>([^<]*)<\/a>/img, "$1");
  3. document.body.innerHTML = str;

img это: i - регистро независимость, m - многотрочность, g - плобальность(чтоб заменил не 1 элемент, а все)
6. Ch_chov - 30 Ноября, 2011 - 16:53:01 - перейти к сообщению
CODE (css):
скопировать код в буфер обмена
  1. a {
  2.     cursor: default;
  3.     color: black;
  4.     text-decoration: none;
  5. }
7. Albertino - 01 Декабря, 2011 - 08:21:58 - перейти к сообщению
Ch_chov пишет:
CODE (css):
скопировать код в буфер обмена
  1. a {
  2.     cursor: default;
  3.     color: black;
  4.     text-decoration: none;
  5. }

При таком подходе ссылка остается ссылкой, просто меняется ее оформление, а мне надо было чтоб ссылка заменялась именно на простой текст
8. DeepVarvar - 01 Декабря, 2011 - 08:27:10 - перейти к сообщению
Ато принтер знаете ли, перейдет по этой нежелательной ссылке и распечатает с гордостью не ту страницу...
9. Albertino - 01 Декабря, 2011 - 08:28:47 - перейти к сообщению
При моем подходе возникла проблема: какую регулярку написать, чтоб ссылки следующего вида
<a href="javascript: window.close();">закрыть</a><br />
<a href="javascript:window.print();">печатать</a>
не обрезались и чтоб теги внутри <a></a> тотжеставались, те из ссылки вида
<a><b>text</b></a> должна стать <b>text</b>
(Добавление)
DeepVarvar пишет:
Ато принтер знаете ли, перейдет по этой нежелательной ссылке и распечатает с гордостью не ту страницу...

не в том проблема, пользователь может нажать на ссылку и его перебросит на нормальную страницу(не принт версию)
10. Viper - 01 Декабря, 2011 - 09:09:30 - перейти к сообщению
Albertino вам надоест это делать на JS. Сделайте это 1 раз на стороне сервера. Вы потеряете в скорости обработки на JS значительно больше чем в запросе к серверу и БД.
11. Albertino - 01 Декабря, 2011 - 09:27:09 - перейти к сообщению
Viper пишет:
Albertino вам надоест это делать на JS. Сделайте это 1 раз на стороне сервера. Вы потеряете в скорости обработки на JS значительно больше чем в запросе к серверу и БД.

проблема в том что блоки которые выводятся в "версию для печати" берутся из разных модулей(и не всегда из одних и тех же), в формировании страницы участвует как минимум 3разных модуля и для каждой страницы они свои(конечно на они могут повторятся) и плюс используется шаблонизтор smarty, так что все ссылки уже прописаны в шаблонах и каждый модуль использует свой шаблон(а бывает и не один, внутри шаблона подключается еще один).
Чтобы Сделать это все на стороне сервера придется перелопатить вообще всю систему(и уж поверте она не маленькая), переписать все шаблоны, так что я склонен сделать это на JS

Вообщем скажу так,что на стороне сервера это не сделать, нужно все это сделать именно после загрузки страницы браузером

 

Powered by ExBB FM 1.0 RC1