在PHP中给出以下字符串:
$html = "<div>
<p><span class='test1 test2 test3'>text 1</span></p>
<p><span class='test1 test2'>text 2</span></p>
<p><span class='test1'>text 3</span></p>
<p><span class='test1 test3 test2'>text 4</span></p>
</div>";
我只想要清空或删除任何包含“test2”的类,结果就是这样:
<div>
<p><span class=''>text 1</span></p>
<p><span class=''>text 2</span></p>
<p><span class='test1'>text 3</span></p>
<p><span class=''>text 4</span></p>
</div>
如果你要删除元素:
<div>
<p>text 1</p>
<p>text 2</p>
<p><span class='test1'>text 3</span></p>
<p>text 4</p>
</div>
我很高兴使用正则表达式或PHP Simple HTML DOM Parser之类的东西,但我不知道如何使用它。使用正则表达式,我知道如何找到元素,但不知道与它相关的特定属性,特别是如果有多个属性,如上面的例子。有什么想法吗?
答案 0 :(得分:6)
DOMDocument
类是一个非常直观且易于理解的界面,旨在帮助您以类似DOM的方式处理数据。使用xpath选择器查询DOM应该是更简单的任务:
// Build our DOMDocument, and load our HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
// Preserve a reference to our DIV container
$div = $doc->getElementsByTagName("div")->item(0);
// New-up an instance of our DOMXPath class
$xpath = new DOMXPath($doc);
// Find all elements whose class attribute has test2
$elements = $xpath->query("//*[contains(@class,'test2')]");
// Cycle over each, remove attribute 'class'
foreach ($elements as $element) {
// Empty out the class attribute value
$element->attributes->getNamedItem("class")->nodeValue = '';
// Or remove the attribute entirely
// $element->removeAttribute("class");
}
// Output the HTML of our container
echo $doc->saveHTML($div);
答案 1 :(得分:4)
已更新并经过测试! 您可以从上面的链接或here获取simple_html_dom.php。
两种情况:
include('../simple_html_dom.php');
$html = str_get_html("<div><p><span class='test1 test2 test3'>text 1</span></p>
<p><span class='test1 test2'>text 2</span></p>
<p><span class='test1'>text 3</span></p>
<p><span class='test1 test3 test2'>text 4</span></p></div>");
案例1:
foreach($html->find('span[class*="test2"]') as $e)
$e->class = '';
echo $html;
案例2:
foreach($html->find('span[class*="test2"]') as $e)
$e->parent()->innertext = $e->plaintext;
echo $html;
答案 2 :(得分:3)
$notest2 = preg_replace(
"/class\s*=\s*'[^\']*test2[^\']*'/",
"class=''",
$src);
下进行。
答案 3 :(得分:1)
您可以使用任何DOM Parser,遍历每个元素。检查其class
属性是否包含test2
类(strpos()),如果是,则将空字符串设置为class
属性的值。
你也可以使用正则表达式来做到这一点 - 更短的方式。只需使用以下表达式查找并替换(preg_replace()):#class=".*?test2.*?"#is