Свойство "nodeValue" текстового узла пусто - как мне проверить его?
Допустим, у меня есть очень простая страница с телом, одним div и элементом абзаца внутри с некоторым текстом.
<body>
<div>
<p>some text</p>
<div>
</body>
В зависимости от браузера элементы body / div будут иметь текстовые узлы (nodeType === 3, nodeValue === "--blank--"). Однако элемент P будет иметь допустимый текстовый узел с nodeValue === "некоторый текст".
Что меня интересует, так это что такое "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...
Ура, Алекс
2 ответа
Вы можете использовать регулярное выражение, такое как:
var re = /\S/; // Match non-whitespace
if (node.nodeType == 3 && re.test(node.nodeValue)) {
// text node has something other than whitespace
}
отмечая, что существуют небольшие различия в том, что браузеры считают пробелами и что соответствует \s
, но это не может быть важно здесь.
Просто trim()
[документы] пробел, и посмотрите, осталось ли что-нибудь:
if( body.childNodes[0].nodeValue.trim() ) {
// more than white space
} else {
// just white space
}
Если бы было только пустое пространство, вы в конечном итоге с ложным значением. В противном случае это будет правдой.
Ссылка docs обеспечивает следующую совместимость:
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
};
}