dtwbp26022 2015-04-28 12:50
浏览 52
已采纳

php dom加载表单并在里面创建元素

What im trying to do is load a form and create elements inside it but i end up with something like this:

<form id="form_54" accept-charset="utf-8"></form><input type="text" name="name">

The outpot i'm lookin for is:

<form id="form_54" accept-charset="utf-8"><input type="text" name="name"></form>

this is my function:

public function input($name, $attributes = array(), $type = 'text')
{
    $form = new DOMDocument();
    $form->loadXML($this->doc->saveHTML());

    $input = $form->createElement('input');
    $input->setAttribute('type', $type);
    $input->setAttribute('name', $name);

    if(isset($attributes))
    {
        foreach($attributes as $attr => $val)
        {
            $input->setAttribute($attr, $val);
        }
    }

    $form->appendChild($input);
    $this->doc->loadXML($form->saveHTML());
}

Correct function thanks to Ghost:

public function input($name, $attributes = array(), $type = 'text')
{
    $form = $this->doc->getElementsByTagName('form')->item(0);

    $input = $this->doc->createElement('input');
    $input->setAttribute('type', $type);
    $input->setAttribute('name', $name);

    if(isset($attributes))
    {
        foreach($attributes as $attr => $val)
        {
            $input->setAttribute($attr, $val);
        }
    }

    $form->appendChild($input);
    $this->doc->appendChild($form);
}
  • 写回答

1条回答 默认 最新

  • doutongxuan1614 2015-04-28 12:57
    关注

    Most likely you're appending on the parent element instead of the form. Try to target the form first, then making the append.

    public function input($name, $attributes = array(), $type = 'text')
    {
        $dom = new DOMDocument();
        $dom->loadXML($this->doc->saveHTML());
        // target the form
        $form = $dom->getElementsByTagName('form')->item(0);
    
        $input = $dom->createElement('input');
        $input->setAttribute('type', $type);
        $input->setAttribute('name', $name);
    
        if(isset($attributes))
        {
            foreach($attributes as $attr => $val)
            {
                $input->setAttribute($attr, $val);
            }
        }
    
        $form->appendChild($input);
        $this->doc->loadXML($form->saveHTML());
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求指导ADS低噪放设计
  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存