Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $patterns = array('/<ul+([^<]*)<li/m', '/<([^<]*)(?<=<li)(.*)</ul>/s');
- $replace = array('<ul$1<li class="first"','<li class="last"$2$3</ul>');
- $navigation = preg_replace($patterns, $replace, $navigation);
- $(document).ready(
- function() {
- $('#id-of-ul:firstChild').addClass('first');
- $('#id-of-ul:lastChild').addClass('last');
- }
- );
- $patterns = array('/<ul+([^<]*)<li/m','/<([^<]*)(?<=<li)(.*)</ul>/s');
- <?php
- $navigation='<ul>
- <li>Coffee</li>
- <li>Tea</li>
- <li>Milk</li>
- <li>Beer</li>
- <li>Water</li>
- </ul>';
- $patterns = array('/<ul.*?>\s*<li/',
- '/<li((.(?<!<li))*?<\/ul>)/s');
- $replace = array('$0 class="first"',
- '<li class="last"$1');
- $navigation = preg_replace($patterns, $replace, $navigation);
- echo $navigation;
- ?>
- <ul>
- <li class="first">Coffee</li>
- <li>Tea</li>
- <li>Milk</li>
- <li>Beer</li>
- <li class="last">Water</li>
- </ul>
- <?php
- /**
- * Modify list items in pre-rendered html.
- *
- * Usage Example:
- * $replaced_text = ListAlter::addClasses($original_html, array('cool', 'awsome'));
- */
- class ListAlter {
- private $classes = array();
- private $classes_found = FALSE;
- private $count = 0;
- private $total = 0;
- // No public instances.
- private function __construct() {}
- /**
- * Adds 'first', 'last', and any extra classes you want.
- */
- static function addClasses($html, $extra_classes = array()) {
- $instance = new self();
- $instance->classes = $extra_classes;
- $total = preg_match_all('~<li([^>]*?)>~', $html, $matches);
- $instance->total = $total ? $total : 0;
- return preg_replace_callback('~<li([^>]*?)>~', array($instance, 'processListItem'), $html);
- }
- private function processListItem($matches) {
- $this->count++;
- $this->classes_found = FALSE;
- $processed = preg_replace_callback('~(w+)="(.*?)"~', array($this, 'appendClasses'), $matches[0]);
- if (!$this->classes_found) {
- $classes = $this->classes;
- if ($this->count == 1) {
- $classes[] = 'first';
- }
- if ($this->count == $this->total) {
- $classes[] = 'last';
- }
- if (!empty($classes)) {
- $processed = rtrim($matches[0], '>') . ' class="' . implode(' ', $classes) . '">';
- }
- }
- return $processed;
- }
- private function appendClasses($matches) {
- array_shift($matches);
- list($name, $value) = $matches;
- if ($name == 'class') {
- $value = array_filter(explode(' ', $value));
- $value = array_merge($value, $this->classes);
- if ($this->count == 1) {
- $value[] = 'first';
- }
- if ($this->count == $this->total) {
- $value[] = 'last';
- }
- $value = implode(' ', $value);
- $this->classes_found = TRUE;
- }
- return sprintf('%s="%s"', $name, $value);
- }
- }
Add Comment
Please, Sign In to add comment