2013-04-30 112 views
3

檢查DOM文本節點是否爲空白的最佳方法是什麼?通過空白我的意思是隻有空格,回報,標籤等,如果它包含一個nbsp;那麼它不是空白的。javascript:檢查空白文本節點

我做:

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

然而,這也擺脫的NBSP;,這是我不想要的。

(它是一款Chrome擴展程序,以便使用裝飾的正常 - 沒有IE!)

+0

只需添加非中斷空格 – Musa 2013-04-30 22:01:00

+0

NBSP檢查;顯示在nodeValue中,那麼問題是什麼? – dandavis 2013-04-30 22:23:14

+0

如果唯一的保留是非破壞性空間,請執行以下操作:'element.nodeValue.indexOf(「\ u00A0」)> -1 || element.nodeValue.trim()。length> 0' – 2013-04-30 22:23:48

回答

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

編輯,真正的意思是說:

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

這在功能上與OP發佈的內容相同。 – 2013-04-30 21:55:38

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.nodeValueNode.textContent

Node.nodeValue

返回或設置當前節點的值。

下表顯示了不同元素的返回值: ...

文字:文本節點

Node.textContent

獲取的內容或設置文本節點及其後代的內容。

在第一種情況下,我得到了div元素及其後代的文本內容。

在第二種情況下,我選擇div的第一個文本節點,它恰好是第一個子節點,並獲取它的節點值。

+0

您正在測試一個元素。 OP正在測試一個文本節點。 – 2013-04-30 22:18:09

+0

基本上是一樣的東西,請參閱更新 – Xotic750 2013-04-30 22:24:25

+0

是的,這將工作。我不知道它是否適用於所有空格HTML實體。 – 2013-04-30 22:40:08