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 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?