0

我有一堆.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 不是一种选择。

我还研究了包含一个文件,然后再进行修改,但这似乎是不可能的。然后我想我应该逐行阅读文件,然后将其添加。

有没有更好的方法我没有想到?

4

4 回答 4

2

由于不能使用 PHP,因此您可以将 PHP 的DOM ParserXPath 选择器一起使用:

$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();

那应该让你开始。

于 2013-10-18T17:45:12.583 回答
1

您可以使用 PHP 中的 DOMDocument 类从文件中检索信息,然后添加属性和数据。

我真的不记得 DOMDocument 的代码,所以我没有在此处包含任何代码(抱歉),但这里有一些链接:

使用此方法从您的文件中获取 HTML:

http://php.net/manual/en/domdocument.loadhtmlfile.php

查看 DOMDocument 类:

http://php.net/manual/en/class.domdocument.php

于 2013-10-18T17:38:55.177 回答
0

您可能需要使用 .php 而不是 .html。所以像下面这样:

$variableClass="bar2";
include("htmlfilename.html");

其中 htmlfile.html 由

<div id='foo' class="bar <?php echo $variableClass; ?>"></div>
于 2013-10-18T17:46:22.223 回答
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();

希望这可以帮助。

于 2013-10-18T17:46:24.840 回答