How do I check if an HTML element is empty using jQuery?

I'm trying to call a function only if an HTML element is empty, using jQuery.

Something like this:

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

for more info see and


As some have pointed, the browser interpretation of an empty element can vary. If you would like to ignore invisible elements such as spaces and line breaks and make the implementation more consistent you can create a function (or just use the code inside of it).

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

You can also make it into a jQuery plugin, but you get the idea.

I found this to be the only reliable way (since Chrome & FF consider whitespaces and linebreaks as elements):


White space and line breaks are the main issues with using :empty selector. Careful, in CSS the :empty pseudo class behaves the same way. I like this method:

if ($someElement.children().length == 0){


Yes, I know, this is not jQuery, so you could use this:


Happy now?

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


If by "empty", you mean with no HTML content,

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

Empty as in contains no text?

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

In resume, there are many options to find out if an element is empty:

1- Using html:

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

2- Using text:

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

3- Using is(':empty'):

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

4- Using length

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

In addiction if you are trying to find out if an input element is empty you can use val:

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

Another option that should require less "work" for the browser than html() or children():

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

You can try:

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

*Replace white spaces, just incase ;)

if($("#element").html() === "")


Are you looking for jQuery.isEmptyObject() ?

Here's a jQuery filter based on

$.extend($.expr[':'], {
  trimmedEmpty: function(el) {
    return !$.trim($(el).html());


var el= document.querySelector('body'); 
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

try using any of this!


document.querySelector('div'); // gets the first element.

Line breaks are considered as content to elements in FF.



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

In IE both divs are considered empty, in FF an Chrome only the last one is empty.

You can use the solution provided by @qwertymk

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


$('.elements').each(function(){  // for many elements
    if(!/[\S]/.test($(this).html())) { 
        // is empty

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


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

Try this:

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