2011-10-28 14 views
1

私はZend_DOM_Queryを使ってDOMを使ってHTML要素を読みます。DOMを使用してHTMLを追加していますか?

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

私はhtmlを読み込み、<input>を見つけて、結果をループします。私は実際に何をしたいのか

foreach($inputss as $input){ 
} 

は別の入力のように、異なるクラス名<input type="text" class="b">の各<input>後に追加のマークアップを追加しています。終わりに、私の完全なマークアップがこの

<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"> 

のようになります。私は、HTML私はそれが追加必要な方法を追加しているようだcreateElement()しか使用しない例を見ておきます。何か不足していますか?

答えて

2

これを行う最も簡単な方法は、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でこれを行うと、HTMLの文字列を挿入するためにappendXMLを使用しますが、私はそれが非常に容易または迅速になると表示されていない可能性があるとします。

NBこの理由は、Zend_Dom_Query_Resultオブジェクト内では通常のDOMオブジェクトであるため、通常のDOMメソッドを使用できます。

1

この場合、私は、このあなたが探しているが、この例は参考になっことができるかわからない:

$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())); 
関連する問題