У меня есть эта строка:
$str = '<div class="defaultClass">...</div>';
как я добавляю 'myClass' рядом с 'defaultClass'?
Атрибут "class" - это просто список классов, разделенных пробелами.
$str = '<div class="defaultClass myClass">...</div>';
Или вы можете взломать его вот так:
$str = '<div class="defaultClass">...</div>';
$str = str_replace('class="defaultClass', 'class="myClass defaultClass', $str);
//Result: <div class="myClass defaultClass">...</div>
Или с помощью регулярных выражений:
$str = '<div class="defaultClass">...</div>';
$str = preg_replace(':class="(.*defaultClass.*)":', 'class="\1 myClass"', $str);
//Result: <div class="defaultClass myClass">...</div>
Другие решения включают использование XML для добавления его в узел DOM, что, вероятно, менее подвержено ошибкам, но более продвинуто и требует больших ресурсов.
$str = '<div class="defaultClass ' . $myclass . '">...</div>';
Это предполагает, что myClass является переменной
Я бы взглянул на систему под названием SimpleDom!
Вот небольшой пример!
// Create DOM from string
$html = str_get_html('<div class="defaultClass"><strong>Robert Pitt</strong></div>');
$html->find('div', 1)->class = 'SomeClass';
$html->find('div[id=hello]', 0)->innertext = 'foo';
echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>
Еще несколько примеров: http://simplehtmldom.sourceforge.net/manual.htm
Некоторые загрузки ;): http://simplehtmldom.sourceforge.net/
С родным DOM :
$dom = new DOMDocument;
$dom->loadHTML('<div class="defaultClass">...</div>');
$divs = $dom->getElementsByTagName('div');
foreach($divs as $div) {
$div->setAttribute('class',
$div->getAttribute('class') . ' some-other-class');
}
echo $dom->saveHTML();