我在页面上包含了一堆.html
个文件。有条件地,我需要为这些文件中的某些组件添加类,例如:
<div id='foo' class='bar'></div>
到
<div id='foo' class='bar bar2'></div>
我知道我可以使用像这样的内联PHP来做到这一点
<div id='foo' class="bar <?php echo " bar2"; ?>"></div>
然而,在我包含的任何文件中使用PHP都不是一个选项。
我还研究了包含一个文件然后再修改,但这似乎不可能。然后我想我应该逐行阅读文件,然后添加它。
有没有更好的方式我没想到?
答案 0 :(得分:2)
由于PHP不是一个选项,你可以使用PHP的DOM Parser和XPath selector:
$dom = new DOMDocument();
$dom->loadHTMLFile($htmlFile);
$finder = new DomXPath($dom);
// getting the class name using XPath
$nodes = $finder->query("//*[contains(@class, 'bar')]");
// changing the class name using setAttribute
foreach ($nodes as $node) {
$node->setAttribute('class', 'barbar2');
}
// modified HTML source
$html = $dom->saveHTML();
这应该让你开始。
答案 1 :(得分:1)
您可以使用PHP中的DOMDocument类从文件中检索信息,然后添加属性和数据。
我真的不记得DOMDocument的代码所以我这里没有包含任何代码(抱歉),但这里有一些链接:
使用此方法从您的文件中获取HTML:
http://php.net/manual/en/domdocument.loadhtmlfile.php
查看DOMDocument类:
答案 2 :(得分:0)
您可能需要使用.php而不是.html。 如下所示:
$variableClass="bar2";
include("htmlfilename.html");
htmlfile.html由
组成<div id='foo' class="bar <?php echo $variableClass; ?>"></div>
答案 3 :(得分:0)
取决于你真正想要实现的目标 - 但基本上这可以通过客户端上的jQuery更好地解决。
但无论如何,您可以将HTML片段放在DOM对象中,分析和修改它,并在修改后读回HTML,例如:
// including an HTML file writes to the output stream, so buffer this
ob_start();
include('myfile.html');
$html = ob_get_clean();
// make a DOMDocument
$doc = new DOMDocument();
$doc->loadHTML($html);
// make the changes you need to
$xpath = new DOMXPath($doc);
$nodelist $xpath->query('//div[@id="foo"]');
// etc...
// get modified HTML
$html = $doc->saveHTML();
希望这有帮助。