barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 1 апреля 2011 г.

Получение текстового содержимого узла в IE

Во всех "приличных" браузерах у узла есть свойство node.textContent. В ИЕ (вплоть до ИЕ8) это не работает, поэтому приходится делать так:
nextDiv.firstChild.nodeValue (если текстовый узел - первый, или вообще единственный). Иначе - можно использовать следующую функцию:

function getElemText(node){
    return node.text || node.textContent || (function(node){
        var _result = "";
        var childrens = node.childNodes;
        var i = 0;
        while (i < childrens.length) {
            var child = childrens.item(i);
            switch (child.nodeType) {
                case 1: // ELEMENT_NODE
                case 5: // ENTITY_REFERENCE_NODE
                    _result += arguments.callee(child);
                    break;
                case 3: // TEXT_NODE
                case 2: // ATTRIBUTE_NODE
                case 4: // CDATA_SECTION_NODE
                    _result += child.nodeValue;
                    break;
                case 6: // ENTITY_NODE
                case 7: // PROCESSING_INSTRUCTION_NODE
                case 8: // COMMENT_NODE
                case 9: // DOCUMENT_NODE
                case 10: // DOCUMENT_TYPE_NODE
                case 11: // DOCUMENT_FRAGMENT_NODE
                case 12: // NOTATION_NODE
                // skip
                break;
            }
            i++;
        }
        return _result;
    }(node));
}

В принципе, её можно порядком укоротить, убрав ненужные case. Ну или использовать $(node).text() из jQuery ;)

Комментариев нет:

Отправить комментарий