Свойство nodeValue текстового узла пусто - как мне его проверить?

Допустим, у меня есть очень простая страница с телом, одним div и элементом абзаца внутри с некоторым текстом.

<body>
  <div>
    <p>some text</p>
  <div>
</body>

В зависимости от браузера элементы body/div будут иметь текстовые узлы (nodeType === 3, nodeValue === "--blank--"). Однако элемент P будет иметь допустимый текстовый узел с nodeValue === "some text".

Что мне интересно, так это то, что это "nodeValue" (--blank--) "поддельного" текстового узла, который представляет собой пробел, равный, поскольку я хочу написать тест if, который позволит мне отфильтровать поддельные текстовые узлы .

Пример:

var body = document.getElementsByTagName("body")[0];  // shortcut to body element.
console.log(body.childNodes[0].nodeValue) // maps to one of the fake text nodes that are blank.
// returns a blank line. What is that "blank" equal to? It's not 'null' or "" or undefined...

Привет, Алекс


person dkugappi    schedule 05.10.2011    source источник
comment
Самый быстрый способ получить доступ к телу — использовать свойство body документа document, т. е. document.body.   -  person RobG    schedule 05.10.2011


Ответы (2)


Просто trim()[docs] пробел и посмотрите, осталось ли что-нибудь:

if( body.childNodes[0].nodeValue.trim() ) {
    // more than white space
} else {
    // just white space
}

Если было только пустое пространство, вы получите ложное значение. В противном случае это будет правдой.

Ссылка на документы предоставляет следующую прокладку совместимости:

if (!String.prototype.trim) {
    String.prototype.trim = function () {
        return this.replace(/^\s+|\s+$/g, '');
    };
}
person user113716    schedule 05.10.2011

Вы можете использовать регулярное выражение, например:

var re = /\S/; // Match non-whitespace
if (node.nodeType == 3 && re.test(node.nodeValue)) {
  // text node has something other than whitespace
}

отмечая, что существуют небольшие различия в том, что браузеры считают пробелом и что соответствует \s, но это может быть не важно здесь.

person RobG    schedule 05.10.2011