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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вырезать все теги через DOM 
:(
    Опции темы
DumpEX
Дата 24.12.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. У меня такая проблема. Мне необходимо в JS-объекте сначала вырезать все дочерние для <body> теги вместе с атрибутами из xhtml-страницы, а потом вернуть их на свои места. Регулярные выражения использовать не имею возможноcти, нужен DOM.
Вроде бы возникла идея сделать это через цикл, вглубь childNodes, начиная от window.document.childNodes[0].childNodes[1] (т.е. от body), но всё равно до конца сообразить как это лучше сделать не могу =(
PM MAIL   Вверх
ksnk
Дата 24.12.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Странные вещи рассказываете... Попробуйте еще раз - что же на самом деле надо?...

Цитата(DumpEX @  24.12.2007,  11:17 Найти цитируемый пост)
Регулярные выражения использовать не имею возможноcти, нужен DOM.

Это как это ? не умеете пользоваться регулярками? Или заказчик требует "через Дом..."? ;-)

Цитата(DumpEX @  24.12.2007,  11:17 Найти цитируемый пост)
необходимо в JS-объекте сначала вырезать все дочерние для <body> теги вместе с атрибутами из xhtml-страницы, а потом вернуть их на свои места

Что такое - вырезать? Аналог striptags?
Зачем обязательно возвращать? Может просто старый объект вспомнить?...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ghirik
Дата 24.12.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 13
Всего: 20



Я так понял, Вам нужно оставить только текст, потом его обработать и вернуть форматирование. Или как то подругому?


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
DumpEX
Дата 25.12.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ksnk, да, заказчик требует DOM. Можно и вспомнить старый объект, не принципиально. Главное - выделить весь текст в одну переменную, убрав из него все теги.
Ghirik, вы абсолютны правы, именно это мне и нужно.
PM MAIL   Вверх
Ghirik
Дата 25.12.2007, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 13
Всего: 20



Цитата

Ghirik, вы абсолютны правы, именно это мне и нужно. 

Нужно именно оригинальное форматирование или можно просто изъять все данные, сложить их в базу, а потом, динамически выводить в любой формат страницы. Я про это заговорил, потому, что занимался переводом на русский язык каталога dmoz, и там была похожая ситуация. Дак вот, вариант с базой оказался самым правильным.


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
DumpEX
Дата 25.12.2007, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нeт, формaтированиe нужно имeнно оригинальное. В общем суть такова - есть русский тeкст со всeвозможными тeгами. Необходимо нa клиeнтской стороне расставить в нём пeрeносы, не затрагивая, ясноe дeло, сами тeги. Для рaсстановки пeрeносов по всем прaвилам русского языкa будет использоваться парсeр, а вот от самих тeгов надо избавиться чeрeз DOM. А потом вeрнуть их на место, только уже в текст с пeрeводaми. Немного нетривиально, согласeн. Но надо сделать именно так.
PM MAIL   Вверх
ksnk
Дата 25.12.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Обычно такое делается на сервере... заставлять клиента самого форматировать наш текст как-то не красиво smile

Вот, какой-то пример "обхода Дома":
Код

function scanDomTree(e,callback){
    var o= e,
        stack=[null]
    do {
        if(!o) {
            o=stack.pop(); continue  // go up
        }
        if(callback.call(this,o))
            return o;
        if (o.firstChild) {
            stack.push(o.nextSibling);
            o=o.firstChild; // go deep
        } else
            o=o.nextSibling
    } while(stack.length)
    return null;
}

function stripTags(el){
  var s='';
  scanDomTree(el,function(o){
    if (typeof o.tagName=='undefined') { // text node?
      s +=' '+o.data||o.text||o.toString()
    }
  })
  return s; 
}
alert('['+stripTags(document.body)+']');

Насчет корректности всего этого добра я бы подумал так как в IE текстовыми нодами считаются еще и script, но, за исключением этого, вроде все Ok.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
DumpEX
Дата 25.12.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хм, алерт мне выводит пустой [], как будто ни одного тега в body нет. Даже при простейшем body:
Код

<b>Текст</b> <a href="#">Ссылка</a>


Какие требования должны быть к самому HTML-файлу?
PM MAIL   Вверх
ksnk
Дата 25.12.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



А у меня, вроде работает ...
Код

<html>
<head>
<script type="text/javascript">
function scanDomTree(e,callback){
    var o= e,
        stack=[null]
    do {
        if(!o) {
            o=stack.pop(); continue  // go up
        }
        if(callback.call(this,o))
            return o;
        if (o.firstChild) {
            stack.push(o.nextSibling);
            o=o.firstChild; // go deep
        } else
            o=o.nextSibling
    } while(stack.length)
    return null;
}

function stripTags(el){
  var s='';
  scanDomTree(el,function(o){
    if (typeof o.tagName=='undefined') { // text node?
      s +=' '+o.data||o.text||o.toString()
    }
  })
  return s; 
}

</script>
</head>
<body>
page <span id='pid_placer'></span>
<hr>
<a href="#pid=1" onclick="goto(1); return false;">1</a>
<a href="#pid=2" onclick="goto(2); return false;">2</a>
<a href="#pid=3" onclick="goto(3); return false;">3</a>
<a href="#pid=4" onclick="goto(4); return false;">4</a>
<b>Текст</b> <a href="#">Ссылка</a>
<input type="button" onclick="alert('['+stripTags(document.body)+']');">
</body>
</html>


Проверил под IE 6.0 FF и Оперой 9.25


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ghirik
Дата 25.12.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 13
Всего: 20



Попробуйте так брать body:

Код

document.getElementsByTagName('body')[0]


Только укажите так доктип

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 



--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
DumpEX
Дата 25.12.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А, понял. Алерт ерунду выводит, когда сам находится в подключаемом js-файле, он видимо не видит body. А когда из самого html вызывается, то всё нормально.
ksnk, Ghirik , разобрался, спасибо!

Цитата

Обычно такое делается на сервере...


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


 




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


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

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