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 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?