php - 使用 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>
我可以使用较低级别的手动方法来设置此属性吗?
解决方案
我最终使用的解决方法涉及创建一个伪标签,我可以在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);
推荐阅读
- python - 为熊猫数据框选择列名的一部分
- azure - 仅获取 Kusto 查询语言(Azure Monitor 日志)中的类别中的唯一值
- python - 如何根据python中的输入长度创建聊天机器人
- java - JAVA 11 中较早出现在 tools.jar 中的类和资源在哪里?有替代品吗?
- java - 如何使用 Google Fitness Api 构建示例计步器?
- reactjs - 期望一个分配,而是在 reactjs 中看到一个表达式
- sql - 计算与我们进行 >10 次交易的客户,不包括退货
- python - 使用数据框的列值来索引多索引数据框的行
- java - 如何计算json对象项?
- java - 即使通过 java 设置了“读取”权限,也无法读取 Windows 文件