PHP:用于在html元素中查找类的正则表达式
我有一个html ul菜单,它有一个子菜单。我想用PHP将“first item”类添加到子菜单的第一项中PHP:用于在html元素中查找类的正则表达式,php,html,regex,Php,Html,Regex,我有一个html ul菜单,它有一个子菜单。我想用PHP将“first item”类添加到子菜单的第一项中 <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>
<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>
你最好使用和。它们提供了导航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]');
首先,第二个
缺少其关闭
。修复该问题将允许您使用它,它使用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);
这会导致子菜单中的第一个
:
string(198)””
为此使用jQuery或JavaScript
以下是使用jQuery的一种方法:
$('.sub-menu').find('li:first-child').addClass('first-item');
为什么要用PHP来实现这一点?PHP构建HTML。这类事情通常是用JavaScript完成的??检查第二个示例-如何修改HTML Dom元素-或者-仅使用javascript?@JezenThomas:HTML不一定是输出的,即使是输出,可访问性仍然是一个有效的问题。Joudieck:使用HTML解析器和序列化程序,例如
DOMDocument
。
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>"
$('.sub-menu').find('li:first-child').addClass('first-item');