-1

サブメニューのあるhtmlulメニューがあります。PHPでサブメニューの最初の項目に「最初の項目」クラスを追加したいと思います。

<ul id="menu-main" class="menu">
  <li id="menu-item-68" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-68"><a href="...">ITEM1</a></li>
  <li id="menu-item-69" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-69"><a href="...">ITEM2</a>
  <ul class="sub-menu">
    <li id="menu-item-70" class="first-item menu-item menu-item-type-post_type menu-item-object-page menu-item-70"><a href="...">SUB-ITEM-1</a></li>
    <li id="menu-item-71" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71"><a href="...">SUB-ITEM2</a></li>
  </ul>
  <li id="menu-item-73" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-73"><a href="...">ITEM3</a></li>
</ul>

(テキスト内の「最初のアイテム」を探してください)

これまでのところ、私は次のようなものに到達しました:

$output = preg_replace('/(sub-menu.*class.*)menu-item/smi', '$1 first-item menu-item', $output, 1);
4

3 に答える 3

1

DOMDocumentDOMXPathを使用する方がはるかに良いでしょう。これらは、DOM をナビゲートするためのメソッドを提供します。サブメニューを見つけるには、次のようなものを使用します (ただし、テストしていないため、xpath が完全に正しいとは限りません)。関心のある DOM 要素を見つけたら、その class 属性を変更します。

$dom = new DOMDocument ();
$dom -> loadHTML ($htmlString);
$path = new DOMXpath ($dom);

$firstItem = $path -> query ('//ul[@id="main-menu"]//ul[@class="sub-menu"]/li[1]');
于 2012-07-19T14:15:20.027 に答える
1

まず、2 番目<li>にクロージングがありません</li><li>サブメニューの最初のクラスを変更するために DOMDocument / DOMXPath を使用するこれを使用できるように修正します。

$doc = new DOMDocument;
$doc->loadHTML( $html);

$xpath = new DOMXPath( $doc);
$first_node = $xpath->query( '//ul[@id="menu-main"]/ul[@class="sub-menu"]/li')->item(0);

$new_class = $doc->createAttribute( "class");
$new_class->appendChild( $doc->createTextNode( "first-item "));
$new_class->appendChild( $doc->createTextNode( $first_node->getAttributeNode("class")->value));

$first_node->setAttributeNode( $new_class);

これにより、<li>サブメニューの最初の部分が次のようになります。

string(198) "<li id="menu-item-70" class="first-item menu-item menu-item-type-post_type menu-item-object-page menu-item-70"><a href="...">SUB-ITEM-1</a></li>" 
于 2012-07-19T14:31:09.277 に答える
1

これには jQuery または JavaScript を使用します。

jQueryでそれを行う方法は次のとおりです。

$('.sub-menu').find('li:first-child').addClass('first-item');
于 2012-07-19T14:32:38.293 に答える