Применение класса к родительскому элементу в DOM? - PullRequest
1 голос
/ 24 марта 2011
        <li id="weather" class="widget-container widget-dark-blue">
            <h3 class="widget-title">Weather</h3>
            <?php include (TEMPLATEPATH . '/widgets/weather.php'); ?>
        </li>

weather.php отправляет запрос в службу погоды и возвращает таблицу. С помощью DomDocument Class я читаю значения внутри td's. Я применяю имя класса текущего погодного условия к div.weather.

<?php

require_once('classes/SmartDOMDocument.class.php');

$url = 'some/domain...';

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);

$str = curl_exec($curl);

$dom = new SmartDOMDocument();
$dom->loadHTML($str);
$xpath = new DOMXPath($dom);

$tds = $xpath->query('//div/table/tr/td');

foreach ($tds as $key => $cell) {
    if ($key==1) {
        $condition = $cell->textContent;
        //$cell->parentNode->setAttribute('class', 'hello');
        echo "<div class='weather " . strtolower($condition) ."'>";
        ...

?>

Все отлично работает. Мой единственный вопрос: есть ли способ применения условия $ name к элементу списка, который содержит информацию, с помощью PHP? Таким образом, вместо того, чтобы иметь класс с условием $ внутри моей погоды, я бы хотел, чтобы у класса была погода.

<li id="weather" class="widget-container widget-dark-blue $condition">

Есть ли способ применить класс $ condition к списку, который содержит все. Я мог бы легко сделать это с помощью javascript / jquery. Однако мне интересно, есть ли какое-нибудь серверное решение.

спасибо

1 Ответ

2 голосов
/ 25 марта 2011

Может быть, вы могли бы попробовать что-то вроде:

$parent = $cell->parentNode;

while ($parent->tagName != 'li')
{
    $parent = $parent->parentNode;
}

$class = $parent->getAttribute('class');
$parent->setAttribute('class', $class . ' ' . strtolower($condition));
...