首页 > 解决方案 > 使用 DomElement 为 AMP html 设置 [class] 属性

问题描述

无论如何->setAttribute不允许我设置一个名为的属性[class]?我有以下代码:

    $success = $doc->createElement('span', 'You have been successfully subscribed');
    $success->setAttribute('class', 'hide');
    $success->setAttribute('[class]', 'ampState.success'); // error here
    $form->appendChild($success);

但是当试图运行它时,我得到

PHP Fatal error:  Uncaught DOMException: Invalid Character Error in <path>

我可以使用较低级别的手动方法来设置此属性吗?

标签: phpdomamp-html

解决方案


我最终使用的解决方法涉及创建一个伪标签,我可以在str_replace之后:

$success = $doc->createElement('span', 'You have been successfully subscribed');
$success->setAttribute('class', 'hide');

// [class] => pseudo-class
$success->setAttribute('pseudo-class', 'ampState.success'); 

$form->appendChild($success);

然后在最后,我创建生成我所有的 HTML 并在该伪类上执行 str-replace 以将其改回:

// get all HTML inside <body></body>
$body = $doc->getElementsByTagName('body')->item(0);
foreach($body->childNodes as $childNode)
{
    $innerHTML .= $childNode->ownerDocument->saveHTML($childNode);
}

// replace pseudo-class with [class]
$innerHTML = str_replace('pseudo-class', '[class]', $innerHTML);

推荐阅读