Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2011, 18:28
Интересующийся
Отправить личное сообщение для xhugo Посмотреть профиль Найти все сообщения от xhugo
 
Регистрация: 21.03.2011
Сообщений: 15

парсинг тегов, как userjs
хочу спарсить теги, например <title> , срабатывает у всех сайтов.
Но мне надо именно у вконтакте.ру.
var regex = /<title>(.+?)<\/title>/i;
var allhtml = document.getElementsByTagName("html");
var arr = regex.exec(allhtml[0].innerHTML);

alert(arr[1]);

в чем проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 10.05.2011, 18:40
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

в велосипеде
для вывода или назначения надо использовать document.title

alert( document.title )
Ответить с цитированием
  #3 (permalink)  
Старый 10.05.2011, 20:21
Интересующийся
Отправить личное сообщение для xhugo Посмотреть профиль Найти все сообщения от xhugo
 
Регистрация: 21.03.2011
Сообщений: 15

дело в том, что я буду парсить ни только тайтл.
ну и все равно на вконтакте не сработал
Ответить с цитированием
  #4 (permalink)  
Старый 10.05.2011, 21:24
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Не используйте регулярки для разбора (X)HTML!

Есть и другие чудесные способы. ДОМовские: getElementsByTagName, getElementsByClassName, getElementsByЧтоУгодно; CSS-селекторы: querySelector, querySelectorAll; XPath, мощнейший инструмент для траверса.

Только умоляю, никогда не разбирайте HTML-представление содержимого DOM-элемента регулярками в поиске «нужного тега»!
Ответить с цитированием
  #5 (permalink)  
Старый 11.05.2011, 01:07
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Хехе, я помнится по молодости поднимал вопрос парсинга ~1мег произвольно оформленного(в т.ч. и лицами далёкими от веба) при помощи html текста с приведением выходного результата к единому виду.(удаление недопустимых тегов и атрибутов и аккуратное форматирование)

Тогда я решил это регулярками, но честно говоря в код заглядывать боюсь ибо там ужасЪ.
Интересно, можно ли было бы решить эту задачу иным способом и без медленных надмозгов?)
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 11.05.2011, 12:48
Интересующийся
Отправить личное сообщение для xhugo Посмотреть профиль Найти все сообщения от xhugo
 
Регистрация: 21.03.2011
Сообщений: 15

subzey, какой именно сработает то?
пробовал несколько, ни один не сработал
Ответить с цитированием
  #7 (permalink)  
Старый 11.05.2011, 17:57
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

ну, getElementsByTagName, например

document.getElementsByTagName( 'title' )[0].innerText


всмысле, document.title не сработал?
Ответить с цитированием
  #8 (permalink)  
Старый 11.05.2011, 19:38
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Aetae,
смотря насколько по молодости. Сейчас можно даже на PHP
<?php
header("Content-Type: text/plain; charset=utf-8");

/* Тут наш грязненький код */
$str = <<<EOD
<p mso:crap="enabled" mso:foo="" mso:bar><img src="foo.gif" alt="" mso:shit="enabled">Всем при<strong></strong>вет!</p><br />
<p mso:crap="enabled" mso:foo="" mso:bar> Я&nbsp;&mdash; <u><i>очень</u></i> <strong>грязный</strong> кусок кода!
EOD
;

/* Ошибок будет много. Они нам особо не нужны */
libxml_use_internal_errors(true);

/* Создаем "грязный" документ */
$in_document = new DOMDocument();
/* Флаг: продолжаем парсинг в любом случае */
$in_document->recover = true;
/* Загружаем в "грязный" документ данные */
$in_document->loadHTML('<?xml encoding="utf-8" ?><body>' . $str . '</body>');


/* DOM - это только модель. Имплементаций ее достаточно много. Создаем одну такую. */
$dom = new DomImplementation();
/* К ней создаем доктайп. Старый добрый XHTML 1.0 Strict */
$doctype = $dom->createDocumentType("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd");
/* Наконец, создаем "чистый" документ из имплементации с доктайпом */
$document = $dom->createDocument("http://www.w3.org/1999/xhtml", "html", $doctype);
/* Устанавливаем кодировку явным образом */
$document->encoding = "utf-8";

/* Импортируем из "грязного" документа body */
/* Вот тут, кстати, имеет значение тот самый ownerDocument из соседней темы */
$document->body = $document->documentElement->appendChild($document->importNode($in_document->getElementsByTagName("body")->item(0), true));

/* Создаем объект XPath для "чистого" документа */
$xpath = new DOMXpath($document);

/* Начинаем чистить: */
/* Убираем аттрибуты, начинающиеся с mso: */
foreach ($xpath->query('//attribute::*[starts-with(name(), "mso:")]') as $attr) $attr->parentNode->removeAttributeNode($attr);
/* Убираем все пустые элементы, которые не img, br или hr */
foreach ($xpath->query('//*[not(local-name() = "img" or local-name() = "br" or local-name() = "hr" or local-name() = "link")][not(./node())]') as $element) $element->parentNode->removeChild($element);
/* Убираем все br, которые лежат непосредственно в body */
foreach ($xpath->query('/*/body/br') as $element) $element->parentNode->removeChild($element);
/* . . . ну и так далее, до полного просветления */

/* Вывод с отступами */
$document->formatOutput = true;

/* Выводим */
echo $document->saveXML();

/***
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <p><img src="foo.gif" alt="" />Всем привет!</p>
    <p> Я — <u><i>очень</i></u> <strong>грязный</strong> кусок кода!</p>
  </body>
</html>
**/
?>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как сделать такое fancy menu uonax Элементы интерфейса 2 22.05.2010 12:52
Как узнать, присутствует ли в окне полоса прокрутки или нет? возжаждавший Элементы интерфейса 6 12.03.2010 23:00
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56
Изменение css-свойств большОго кол-ва тегов AzriMan Общие вопросы Javascript 2 05.03.2009 15:11