作者共发了5篇帖子。 内容转换:不转换▼
 
点击 回复
403 4
【資料】在兩個DOM文檔之間複製節點(元素)
一派护法 十九级
1楼 发表于:2015-7-5 10:59
<?php
/* 創建兩個HTML文檔片段 */
$html = new DOMDocument("1.0", "iso-8859-1");
$html2 = new DOMDocument("1.0", "iso-8859-1");

/* 創建節點 */
// 下面兩句話是等價的,都可以用
//$x = $html->createElement("div", "text");
$x = new DOMElement("div", "text");
/* 把創建的節點放入文檔1 */
$html->appendChild($x);
echo $html->saveHTML();

/* 複製到文檔2 */
$node = $html2->importNode($x, true); // 創建一個與$x完全一樣的,但屬於文檔2的節點
$html2->appendChild($node); // 放入文檔2中
echo $html2->saveHTML(); // 輸出
?>
一派护法 十九级
2楼 发表于:2015-7-5 11:00
輸出內容:
<div>text</div>
<div>text</div>


一派护法 十九级
3楼 发表于:2015-7-5 11:09
根據這個原理,我們就可以實現DOMElement類的Extend(擴展),然後把擴展類的實例加入到一個HTML文檔樹中:
<?php
class HTMLElement extends DOMElement {
    private $htmlDoc;
    protected $readonlyProperties = array();
   
    function __construct() {
        call_user_func_array("parent::__construct", func_get_args());
        $this->htmlDoc = new DOMDocument();
        $this->htmlDoc->appendChild($this);
    }
   
    function __get($property) {
        return $this->getAttribute($property);
    }
   
    function __set($property, $value) {
        if (!in_array($property, $this->readonlyProperties)) {
            $this->setAttribute($property, $value);
        }
    }
   
    public function appendTo(DOMDocument $htmlDoc) {
        $node = $htmlDoc->importNode($this, true);
        $htmlDoc->appendChild($node);
    }
   
    public function getHTML() {
        return $this->htmlDoc->saveHTML();
    }
}

class Button extends HTMLElement {
    protected $readonlyProperties = array("type");
   
    function __construct() {
        parent::__construct("input");
        $this->setAttribute("type", "button");
    }
   
    function __set($property, $value) {
        parent::__set($property, $value);
    }
}

$html = new DOMDocument("1.0", "iso-8859-1");
$html->formatOutput = true;
$btn = new Button();
$btn->value = "dd";
$btn->appendTo($html);
echo $html->saveHTML();
?>
一派护法 十九级
4楼 发表于:2015-7-5 11:10
回復:3樓
Button類的:
function __set($property, $value) {
        parent::__set($property, $value);
    }
要去掉,忘了刪了
一派护法 十九级
5楼 发表于:2015-7-5 11:11
call_user_func_array("parent::__construct", func_get_args());
這句話也可以寫成:
parent::__construct(...func_get_args());
不過這樣寫Dreamweaver CC要報錯,而PHP本身不報錯。

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:403 回复数:4
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2015-7-5 11:11
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。