Добавить и добавить текстовые узлы к элементу HTML, используя DOM? - PullRequest
17 голосов
/ 25 декабря 2010

Вот мой HTML-код

<html> 
    <body>
        <div>A sample block <div>and child block</div></div>    
    </body>
</html>

Как я могу использовать DOM для добавления и добавления текстовых узлов к элементам BODY без ущерба для его братьев и сестер?

$dom = new DOMdocument();    
@$dom->loadHTML($html);    
$xpath = new DOMXPath($dom);    
$body = $xpath->query('//body')->item(0);    

вот так

<html> 
    <body>
        Newly prepended text
        <div>A sample block <div>and child block</div></div>
        Newly appended text    
    </body>
</html>  

Ответы [ 2 ]

23 голосов
/ 25 декабря 2010

Вы можете создать текстовые узлы с помощью DOMText (или используя DOMDocument::createTextNode):

$before = new DOMText('Newly prepended text');
// $before = $dom->createTextNode('Newly prepended text');
$after = new DOMText('Newly appended text');
// $after = $dom->createTextNode('Newly appended text');

Теперь добавляется только:

$body->appendChild($after);

Для предварительной подготовки мы можем использовать DOMNode::firstChild, чтобы получить первого ребенка тела и DOMNode::insertBefore:

$body->insertBefore($before, $body->firstChild);
0 голосов
/ 25 декабря 2010

это мой код из дополнений и удаление файлов ввода

<span class="file_box"><span><input class="text" type="text" name="emails[]" value="" /><br /></span></span><div style="padding: 0 0 5px 160px;">
                        <input type="button" class="add" value="+" style="width: 25px; height: 25px; margin: 0 5px 0 0;" onclick="addFile(this);" /><input type="button" class="drop" value="-" style="width: 25px; height: 25px;" onclick="dropFile(this);" disabled="true" />
                    </div>

и это JS

var FileCount = 1;

function addFile(object){
    if(document.getElementById) {
        var el = object.parentNode.previousSibling.firstChild;
        var newel = el.parentNode.appendChild(el.cloneNode(true));
        newel.style.marginLeft = "160px";
        FileCount++;
        if(FileCount > 1){
            object.nextSibling.disabled = false;
        }
    }
}

function dropFile(object){
    if(document.getElementById) {
        var el = object.parentNode.previousSibling.lastChild;
        el.parentNode.removeChild(el);
        FileCount--;
        if(FileCount == 1){
            object.disabled = true;
        }
    }
}

Посмотрите, можете ли вы найти для себя что-то

...