2013-04-30 3 views
3

Каков наилучший способ проверки наличия текстового узла DOM? Пустым я имею в виду только пробелы, возвращает, вкладки и т. Д. Если он содержит nbsp; то это НЕ пусто.javascript: check for blank textNode

я делал:

element.nodeValue.trim().length != 0 

Однако это также избавляется от NBSP ;, который я не хочу.

(Ни для расширения Chrome, так использование отделки ОК - нет IE!)

+0

Просто добавить проверку для не разрушающих пространств – Musa

+0

NBSP; появляется в nodeValue, так в чем проблема? – dandavis

+0

Если единственным удержанием является неразрывное пространство, сделайте следующее: 'element.nodeValue.indexOf (" \ u00A0 ")> -1 || element.nodeValue.trim(). length> 0' – 2013-04-30 22:23:48

ответ

-3
if (element.textContent.trim()) ... 

EDIT, на самом деле хотел сказать:

if (element.innerHTML.trim()) ... 
+2

Это функционально идентично тому, что размещал OP. –

1

Что-то вроде этого

HTML

<div id="test1">   
    </div> 
<div id="test2"> &nbsp;  
    </div> 

Javascript

var test1 = document.getElementById("test1"); 
var test2 = document.getElementById("test2"); 

function escapeHTML(str) { 
    var pre = document.createElement('pre'); 
    pre.appendChild(document.createTextNode(str)); 
    return pre.innerHTML; 
} 

console.log(escapeHTML(test1.textContent).trim().length === 0); 
console.log(escapeHTML(test2.textContent).trim().length === 0); 

На jsfiddle

выходе

true 
false 

Или с nodeValue

Javascript

var test1 = document.getElementById("test1").firstChild; 
var test2 = document.getElementById("test2").firstChild; 

function escapeHTML(str) { 
    var pre = document.createElement('pre'); 
    pre.appendChild(document.createTextNode(str)); 
    return pre.innerHTML; 
} 

console.log(escapeHTML(test1.nodeValue).trim().length === 0); 
console.log(escapeHTML(test2.nodeValue).trim().length === 0); 

выход

true 
false 

На jsfiddle

См Node.nodeValue и Node.textContent

Node.nodeValue

Возвращает или задает значение текущего узла.

В следующей таблице приведены значения возврата для различных элементов: ...

Текст: содержание текстового узла

Node.textContent

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

В первом случае я получаю текстовое содержимое элемента div и его потомков.

Во втором случае я выбираю первый текстовый узел div, который является первым дочерним узлом и получает его значение узла.

+0

Вы тестируете элемент. OP проверяет текстовый узел. – 2013-04-30 22:18:09

+0

По существу то же самое, см. Обновление – Xotic750

+0

Да, это сработает. Интересно, работает ли он со всеми пустыми HTML-сущностями. – 2013-04-30 22:40:08