2012-10-15 4 views
2

다음 코드를 사용하여 빈 단락을 확인하지만 절대로 true를 반환하지 않습니다. 왜? 빈 단락을 감지 할 수 없습니다

var isEmpty = pageChildren[i].outerHTML.toUpperCase() === "<P></P>"; 
var isSpace = pageChildren[i].outerHTML.toUpperCase() === "<P> </P>"; 
var isNbsp = pageChildren[i].outerHTML.toUpperCase() === "<P>&NBSP;</P>"; 
if(!isEmpty && !isSpace && !isNbsp){ 
    //do something 
}else{ 
    //do something else 
} 

가 나에게 말한다 무엇 IE8 디버그 도구의 복사 붙여 넣기입니다 outerHTML에에 : 이것은 iframe을 읽어되고 "<P></P>"

그래서 나는이 위의 함수로도 <p></p> 태그를 제거해야 프레임 본문에있는 자식 요소의 수를 트리거합니다.

또한 IE의 HTA 응용 프로그램에서만 실행됩니다. 사용자 기반/구성은 고도로 제어됩니다. 당신이 당신의 객체가 단락되어 있는지 경우

+0

내가 사용하는 거라고 innerHTML을 https://developer.mozilla.org/en-US/docs/DOM/element.innerHTML –

+0

그래서에서

 

모든 차례 나오는 스트립 얼마나 내 끈. 나는 행운과 함께 string.replace를 시도 했었고 일반적인 합의는 정규 표현식을 사용해서는 안된다는 것 같다. – Reahreic

답변

2

대신 innerHTML를 사용해야합니다

var isEmpty = pageChildren[i].innerHTML.trim().length==0; 

합니다 (MDN proposes a replacement for IE8 which lacks trim 참고)를.

textContent을 사용할 수도 있지만 단점은 IE에 대해 다른 테스트를 수행해야한다는 것입니다. trim() 이후

+0

감사합니다. 당신은 4 행할 수 없었던 것을 1 행으로 얻었습니다. – Reahreic

1

내가 정규식 모든 공백을 제거하는 것이 좋습니다, 모든 브라우저에서 지원되지 않습니다

var isEmpty = 
    (pageChildren[i].innerHTML.replace(/\s/g, '').length == 0) ? true : false; 
+1

'.replace (/ \ s/g, '')'를 시도했습니다.'{space} '는 탭과 개행 문자와 일치하지 않습니다. – Blender

+0

@Blender, 잘 찍었다. –

+0

비어있는

태그도 제거 되나요? of는 단지 공백 문자를 제거합니다. – Reahreic

0

그것은 보인다 IE < 9의 앞에 추가 그래서 예를 들면 캐리지 리턴의 outerHTML에 결과에 라인 피드, pageChildren[i].outerHTML.toUpperCase() === '\r\n<P></P>'은 빈 p 요소에 대해 true를 반환합니다.

관련 문제