jQuery를 사용하여 HTML 요소가 비어 있는지 어떻게 확인합니까?


336

jQuery를 사용하여 HTML 요소가 비어있는 경우에만 함수를 호출하려고합니다.

이 같은:

if (isEmpty($('#element'))) {
    // do something
}

$('#elem').text().match(/\S/) || alert('empty');
Thielicious

답변:


557
if ($('#element').is(':empty')){
  //do something
}

자세한 내용은 http://api.jquery.com/is/http://api.jquery.com/empty-selector/를 참조하십시오.

편집하다:

일부 사람들이 지적했듯이 빈 요소에 대한 브라우저 해석은 다를 수 있습니다. 공백과 줄 바꿈과 같은 보이지 않는 요소를 무시하고 구현을보다 일관성있게 만들려면 함수를 만들거나 코드를 사용하십시오.

  function isEmpty( el ){
      return !$.trim(el.html())
  }
  if (isEmpty($('#element'))) {
      // do something
  }

jQuery 플러그인으로 만들 수도 있지만 아이디어를 얻을 수 있습니다.


56
줄 바꿈은 FF 및 Chrome에서 요소의 내용으로 간주됩니다.
Corneliu

@Corneliu가 정확합니다. 나는 그것을 고려한 답변을 아래에 올렸다. 이것은 최근 프로젝트에서 저에게 큰 좌절의 근원이었습니다
DMTintner

2
이것은 훌륭하다
-D

HTML 주석도 내용으로 간주됩니다.
Paolo

함수를 사용하여이 작업을 수행하는 것은 물론 좋지만, 더 "임베디드"(및 약간 까다로운)를 원한다면 jQuery의 프로토 타입을 조작하거나 JQ의 "필터"기능을 사용하는 것이 좋습니다.
TheCuBeMan

117

Chrome과 FF에서 공백과 줄 바꿈을 요소로 간주하기 때문에 이것이 신뢰할 수있는 유일한 방법이라는 것을 알았습니다.

if($.trim($("selector").html())=='')

20
약간 더 압축 된 버전은 빈 문자열의 falsy 다움을 이용할 수 있습니다 : if(!$.trim($("selector").html())
브랜든 Belvin에게

11
나는 그들이 "요소"라고 생각하지 않지만 노드라고 생각합니다. 이는 IMO가 맞습니다. 당신은 또한 할 수있는 if($("selector").children().length === 0)if($("selector > *").length === 0).
panzi

1
"요소"와 "노드"를 혼동하고 있다고 생각합니다.

1
$ ( "selector"). html (). trim () === ''
user1156544

1
이유는 모르지만이 대답의 방법은 if ​​($. trim ($ ( "selector"). html ()) == '') 작동했습니다. .is ( ': empty')하지 않았습니다!
Zeljko Miloradovic 2016 년

62

공백과 줄 바꿈은 : empty 선택기를 사용하는 주요 문제입니다. CSS에서 : empty pseudo 클래스는 같은 방식으로 작동합니다. 나는이 방법을 좋아한다 :

if ($someElement.children().length == 0){
     someAction();
}

4
내 DIV에 HTML 주석이 있었기 때문에 위에서 선택했습니다.
Paolo

2
가장 우아한 해결책은 정답이어야합니다.
Christoffer Bubach

6
참고 $.children()이 솔루션에만 검사를 의미 텍스트 또는 주석 노드를 반환하지 않습니다는 요소가 빈입니다 요소 . 텍스트 나 주석 만 포함 된 요소를 필요에 따라 비워 둘 수 없는 경우 다른 솔루션 중 하나를 사용해야합니다.
sierrasdetandil

select요소에 대한 @sierrasdetandil 은 완벽합니다. 조건은 또한 될 수 있습니다 if(! $el.children().length).
CPHPython

28
!elt.hasChildNodes()

예, 이것은 jQuery가 아니므로 다음을 사용할 수 있습니다.

!$(elt)[0].hasChildNodes()

이제 행복해?


1
+1 filter필요한 경우가 아니면 함수 내에서 jQuery를 사용하고 싶지 않기 때문에 jQuery 함수 내에서 접근 방식 을 사용했습니다.
WynandB

1
공백 만 비어 있다고 생각하면 <div class="results"> </div>이 문은 false를 반환합니다. jsfiddle.net/ytliuSVN/0pdwLt46
페니 리우 1

19
jQuery.fn.doSomething = function() {
   //return something with 'this'
};

$('selector:empty').doSomething();

큰! 나는 ifs가없는 건축을 좋아합니다.
Nikolay Fominyh

@Nikolay에 전적으로 동의합니다. 내 특정 상황에는 유용하지 않지만 미래를 위해 기억할 것입니다!
vitto

'이것'을 적용해야한다면 이것은 효과가 없을 것입니다
Zeal Murapa

다른 어떤 것 thisJQuery와 요소 @ZealMurapa 이외의 수?
AlienWebguy

12

"빈"이라는 말은 HTML 콘텐츠가 없다는 의미입니다.

if($('#element').html() == "") {
  //call function
}

주의, 공백과 줄 바꿈으로 인해 html은 == ''가 아니지만 요소는 여전히 비어 있습니다. 다른 해결책은 아래 답변을 확인하십시오
DMTintner

8

텍스트가 포함되지 않은 상태로 비어 있습니까?

if (!$('#element').text().length) {
    ...
}

이것은 내용이 이미지 인 요소를 다루지 않습니다 (내가 그 방법을 묻지 마십시오 ...)
Bad Request

@BadRequest 아니요, "다음과 같이 텍스트 가 포함되어 있지 않습니까?" 뒤에 나오는 물음표 :)
jensgram

7

이력서에는 요소가 비어 있는지 확인하는 많은 옵션이 있습니다.

1- 사용 html:

if (!$.trim($('p#element').html())) {
    // paragraph with id="element" is empty, your code goes here
}

2- 사용 text:

if (!$.trim($('p#element').text())) {
    // paragraph with id="element" is empty, your code goes here
}

3- 사용 is(':empty'):

if ($('p#element').is(':empty')) {
    // paragraph with id="element" is empty, your code goes here
}

4- 사용 length

if (!$('p#element').length){
    // paragraph with id="element" is empty, your code goes here
}

입력 요소가 비어 있는지 확인하려는 경우 중독에서 다음을 사용할 수 있습니다 val.

if (!$.trim($('input#element').val())) {
    // input with id="element" is empty, your code goes here
}

2

브라우저에 대해 "작업"이 적어야하는 또 다른 옵션은 다음 html()children()같습니다.

function isEmpty( el ){
  return !el.has('*').length;
}

1
document.getElementById("id").innerHTML == "" || null

또는

$("element").html() == "" || null

0

당신은 시도 할 수 있습니다:

if($('selector').html().toString().replace(/ /g,'') == "") {
//code here
}

* 공백을 대치하십시오.;)


!/[\S]/.test($('Selector').html())공백이
생기면

정규식 플래그의 / i가 왜 필요한가요? 공백 문자의 대문자와 소문자 버전이 있습니까?
Alexis Wilke

고마워, 내 대답을 업데이트했습니다. 나는 왜 내가 / i를 추가했는지 전혀 모른다
Marc Uberstein

1
@RobertMallow, 아마도 정규 표현식이 \ S를 지원하지만 유니 코드는 공백을 Cc, Zs, Zl, Zp로 정의합니다. unicode.org/Public/UNIDATA/PropList.txt- 대문자는 Lu ...
Alexis Wilke

1
@RobertMallow도 The production CharacterClassEscape :: S evaluates by returning the set of all characters not included in the set returned by CharacterClassEscape :: s.에서 ecma-international.org/ecma-262/5.1/#sec-15.10.2.12
알렉시스 WILKE




-1

자바 스크립트

var el= document.querySelector('body'); 
console.log(el);
console.log('Empty : '+ isEmptyTag(el));
console.log('Having Children : '+ hasChildren(el));


function isEmptyTag(tag) { 
    return (tag.innerHTML.trim() === '') ? true : false ;
}
function hasChildren(tag) {
    //return (tag.childElementCount !== 0) ? true : false ; // Not For IE
    //return (tag.childNodes.length !== 0) ? true : false ; // Including Comments
    return (tag.children.length !== 0) ? true : false ; // Only Elements
}

이 중 하나를 사용해보십시오!

document.getElementsByTagName('div')[0];
document.getElementsByClassName('topbar')[0];

document.querySelectorAll('div')[0];
document.querySelector('div'); // gets the first element.

-1

이 시도:

if (!$('#el').html()) {
    ...
}

-2

줄 바꿈은 FF에서 요소의 내용으로 간주됩니다.

<div>
</div>
<div></div>

전의:

$("div:empty").text("Empty").css('background', '#ff0000');

IE에서 두 div는 모두 비어있는 것으로 간주되며 FF에서는 Chrome이 마지막 것만 비어 있습니다.

@qwertymk에서 제공하는 솔루션을 사용할 수 있습니다

if(!/[\S]/.test($('#element').html())) { // for one element
    alert('empty');
}

또는

$('.elements').each(function(){  // for many elements
    if(!/[\S]/.test($(this).html())) { 
        // is empty
    }
})
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.