Node.normalize () отказывает в IE6

Я делаю некоторое управление TextNodes в JavaScript, и я (к сожалению), должен поддерживать IE6. Node.normalize () отказывает, и я должен работать вокруг этого. Мой первый наклон состоит в том, чтобы просто повторно реализовать его с помощью других методов DOM. Как я реализовал бы это?

5
задан Christian Oudard 7 January 2010 в 20:01
поделиться

2 ответа

Вам нужно будет рекурсивно просмотреть все дочерние узлы текущего узла. При рассмотрении узла вы должны удалить все пустые текстовые узлы и объединить любые смежные текстовые узлы.

 function myNormalize( node )
     for each child node of node do
         if child is not text
            normalize(child)
         else
            if child node is empty
               delete
               continue
            else 
                sibling = next node
                while sibling exists and sibling is a text node
                    if sibling is empty
                       delete sibling
                    else
                       combine sibling with child
                    get next sibling
                end
            end
        end
    end
end
1
ответ дан 18 December 2019 в 14:46
поделиться

на основе псевдокода tvanfosson, вот что я придумал в javascript:

var ELEMENT_NODE = 1;
var TEXT_NODE = 3;
function normalize(node) {
    for (i=0; i<node.childNodes.length; i++) {
        var child = node.childNodes[i];
        if (child.nodeType == ELEMENT_NODE) {
            normalize(child);
            continue;
        }
        if (child.nodeType != TEXT_NODE) { continue; }
        var next = child.nextSibling;
        if (next == null || next.nodeType != TEXT_NODE) { continue; }
        var combined_text = child.nodeValue + next.nodeValue;
        new_node = node.ownerDocument.createTextNode(combined_text);
        node.insertBefore(new_node, child);
        node.removeChild(child);
        node.removeChild(next);
        i -= 1;
    }
}
0
ответ дан 18 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: