PHP добавление идентификатора атрибута к заголовкам

1

Я пытаюсь разобрать HTML-заголовки для своих страниц и добавить идентификатор для соответствия содержимому. Мне удалось сделать это с помощью find и replace, но он не работает, когда присутствуют какие-либо дополнительные атрибуты HTML...

Heres, что в массиве заголовков, чтобы изменить

[
    'find' => sprintf('<h%u>%s</h%u>', $level, $title, $level),
    'replace' => sprintf('<h%u id="%s">%s</h%u>', $level, slugify($title), $title, $level),
    'slug' => slugify($title)
]

Позже замена выполняется...

foreach ($parsed_content as $fix) {
    $content = str_replace($fix['find'], $fix['replace'], $content);
}

Это не лучший способ сделать это, я знаю, но это был просто тест, теперь, чтобы заставить его работать правильно, я думаю, что мне просто нужно использовать регулярное выражение вместо стандартного вызова str_replace.

Я использую DOMDocument, может быть, есть альтернативный способ сделать это там?

Изменение: я пытаюсь использовать xpath для maintulate html. У меня есть простой цикл для получения данных, но я не уверен, как применить код к фактическому документу. Есть идеи? Херес, что у меня есть

$dom = new DOMDocument;
$dom->loadHTML($the_dom);
$xpath = new DOMXPath($dom);

$elements = $xpath->query('(//h1|//h2|//h3|//h4|//h5)');

foreach ($elements as $index => $element) {

    $element->setAttribute('id', sanitize_title($element->textContent));
    pr($element);

}
Теги:

1 ответ

0

Мое предложение было бы использовать JS для этого.

Сначала установите JS-переменные с значениями переменных PHP:

var level = <?= $level ?>; // inject PHP into JS
var title = <?= $title ?>;

Затем используйте JS (или jQuery) для замены содержимого:

$("h" + level).text(title);

Я думаю, что этот способ манипулирования DOM с клиентской стороны проще, чем использование регулярного выражения с серверного языка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню