2011-10-28 4 views
1

DOM을 사용하여 HTML 요소를 읽으려고 Zend_DOM_Query를 사용하고 있습니다.DOM을 사용하여 HTML을 추가 하시겠습니까?

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

나는 html을로드하고 <input>을 찾은 다음 결과를 반복합니다. 실제로 수행 할 작업을

foreach($inputss as $input){ 
} 

는 다른 입력과 같은 각 <input> 후하지만 서로 다른 클래스 이름 <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"> 
<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())); 
관련 문제