【问题标题】:Adding HTML using DOM?使用 DOM 添加 HTML?
【发布时间】:2011-10-28 17:00:10
【问题描述】:

我正在使用 Zend_DOM_Query 来读取使用 DOM 的 HTML 元素。

<input type="text" class="a">
<input type="text" class="a">
<input type="text" class="a">

我加载 html 并找到 &lt;input&gt;,然后遍历结果。

foreach($inputss as $input){
}

我真正想做的是在每个 &lt;input&gt; 之后添加额外的标记,就像另一个输入但不同的类名 &lt;input type="text" class="b"&gt;。最后,我的完整标记将如下所示

<input type="text" class="a">
<input type="text" class="b">
<input type="text" class="a">
<input type="text" class="b">
<input type="text" class="a">
<input type="text" class="b">

我不断看到使用 createElement() 的示例,但似乎没有按照我需要的方式添加 HTML。我错过了什么吗?

【问题讨论】:

    标签: php zend-framework dom


    【解决方案1】:

    最简单的方法确实是使用createElement

    foreach($inputss as $input){
        $newEl = $input->ownerDocument->createElement('input');
        $newEl->setAttribute('type', 'text');
        $newEl->setAttribute('class', 'b');
        $input->parentElement->insertBefore($newEl, $input->nextSibling);
    }
    

    除了最后一行,诚然有点冗长,这对我来说似乎很简单。

    我想您可以使用createDocumentFragment 执行此操作并使用appendXML 插入HTML 字符串,但我认为这不会更容易或更快。

    请注意,这样做的原因是 Zend_Dom_Query_Result 对象内是普通的 DOM 对象,因此您可以对它们使用普通的 DOM 方法。

    【讨论】:

      【解决方案2】:

      我不确定这是否是您要查找的内容,但此示例可能会有所帮助:

      $html = <<<HTML
      <input type="text" class="a">
      <input type="text" class="a">
      <input type="text" class="a">
      HTML;
      
      $dom    = new DOMDocument();
      $dom->loadHTML($html);
      
      $xpath  = new DOMXPath($dom);
      $nodes  = $xpath->query('//input[@class="a"]');
      foreach ($nodes as $node) {
          $newNode = $node->cloneNode();
          $newNode->setAttribute('class', 'b');
          $node->parentNode->insertBefore($newNode, $node->nextSibling);
      }
      
      var_dump(($dom->saveHTML()));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        • 2019-06-09
        • 2015-09-23
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 2016-02-13
        相关资源
        最近更新 更多