虽然内置的 DOM 函数很棒,因为它们被设计为支持通用的 XML,但生成 HTML DOM 变得特别冗长。我最终编写了这个函数来大幅提高速度。
而不是调用类似于
<?php
$div = $dom->createElement("div");
$div->setAttribute("class","MyClass");
$div->setAttribute("id","MyID");
$someOtherDiv->appendChild($div);
?>
你可以用
<?php
$div = newElement("div", $someOtherDiv, "class=MyClass;id=MyID");
?>
"key1=value;key2=value" 语法使用起来非常快,但显然如果你的内容中有这些字符,它就无法正常工作。因此,你也可以将一个数组传递给它
<?php
$div = newElement("div", $someOtherDiv, array("class","MyClass"));
?>
或者一个包含数组的数组,代表不同的属性
<?php
$div = newElement("form", $someOtherDiv, array(array("method","get"), array("action","/refer/?id=5");
?>
这是函数
<?php
function newElement($type, $insertInto = NULL, $params=NULL, $content="")
{
$tempEl = $this->dom->createElement($type, $content);
if(gettype($params) == "string" && strlen($params) > 0)
{
$attributesCollection =split(";", $params);
foreach($attributesCollection as $attribute)
{
$keyvalue = split("=", $attribute);
$tempEl->setAttribute($keyvalue[0], $keyvalue[1]);
}
}
if(gettype($params) == "array")
{
if(gettype($params[0]) == "array")
{
foreach($params as $attribute)
{
$tempEl->setAttribute($attribute[0], $attribute[1]);
}
} else {
$tempEl->setAttribute($params[0], $params[1]);
}
}
?>