2011-10-05 6 views
0

그래서 본문, 단일 div 및 텍스트가있는 단락 요소가 포함 된 매우 기본적인 페이지가 있다고 가정 해 보겠습니다.텍스트 노드의 "nodeValue"속성이 비어 있습니다. 어떻게 테스트합니까?

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

은 브라우저에 따라, 신체/DIV 요소는 텍스트 노드 (nodeType에의 === 3, nodeValue를 === "--blank--")을해야합니다. 그러나 P 엘레멘트는 nodeValue === "some text"를 가진 정당한 텍스트 노드를 가질 것이다.

궁금한 점은 공백을 나타내는 '가짜'텍스트 노드의 "nodeValue"(--blank--)가 무엇인지 궁금합니다. 필자가 테스트를 작성하여 필터를 제거하도록할까요? 가짜 텍스트 노드.

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

공백 만 있었다면 당신은거야 :

예 : 왼쪽 거기에 아무것도 경우

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

본문에 액세스하는 가장 빠른 방법은 * document *의 본문 * 속성 (예 : [document.body] (http://www.w3.org/TR/DOM-Level-2-HTML/))입니다. html.html # ID-56360201). – RobG

답변

1

그냥 trim()[docs] 공백, 그리고 참조 잘못된 값으로 끝나야합니다. 그렇지 않으면 진실이 될 것입니다. 브라우저가 공백을 고려하고 무엇 무엇에 약간의 차이가 있음을 지적

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

:

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

당신은 같은 정규 표현식을 사용할 수

워드 프로세서 링크는 다음과 같은 호환성 심을 제공 \s와 일치하지만 여기서는 중요하지 않을 수 있습니다.

관련 문제