php DOMDocument: выбор определенного имени класса в пределах определенного идентификатора? - PullRequest
0 голосов
/ 03 апреля 2011

Эй, ребята, два вопроса к классу DOMDocument ...

Я делаю это с помощью jQuery:

$('#wpf-wrapper .wpf-table .wpf-input').addClass('input-field');

Я хочу сделать то же самое с классом DOMDocument! Как это может быть сделано? Как я могу выбрать это?

Второй вопрос: почему это не работает?

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

$qr = $dom->getElementById('quick-reply-submit');
//$qr->setAttribute('class', 'btn small width480');
//ERROR: Call to a member function on a non-object...??

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 03 апреля 2011

Вы можете использовать DOMXPath для поиска в DOMDocument, а затем выполнить итерацию по результатам запроса, чтобы добавить необходимое значение в атрибут class, если оно еще не выполненотам:

// This is the equivalent of '#wpf-wrapper .wpf-table .wpf-input'
$expr = '//*[@id="wpf-wrapper"]//*[@class="wpf-table"]//*[@class="wpf-input"]';

$result = $xpath->query($expr);
for($i = 0; $i < $result->length; ++$i) {
    // Get the classes of each matched element
    $classes = explode(' ', $result->item($i)->getAttribute('class'));

    // Add "input-field" if it's not in there already
    if(!in_array('input-field', $classes)) {
        $classes[] = 'input-field';
    }

    // Set the class attribute to the new value
    $result->item($i)->setAttribute('class', implode(' ', $classes));
}

Ваш код "второго вопроса" не работает, потому что нет элемента с идентификатором quick-reply-submit - другой возможности нет.

...