Как проверить, является ли элемент HTML пустым с помощью jQuery?

Я пытаюсь вызвать функцию только в том случае, если элемент HTML пуст, используя jQuery.

Что-то вроде этого:

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

Ответ 1

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

для получения дополнительной информации см. http://api.jquery.com/is/ и http://api.jquery.com/empty-selector/

EDIT:

Как указывали некоторые, интерпретация браузера пустого элемента может меняться. Если вы хотите игнорировать невидимые элементы, такие как пробелы и разрывы строк, и сделать реализацию более последовательной, вы можете создать функцию (или просто использовать код внутри нее).

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

Вы также можете превратить его в плагин jQuery, но вы получите эту идею.

Ответ 2

Я обнаружил, что это единственный надежный способ (поскольку Chrome и FF рассматривают пробелы и разрывы строк как элементы):

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

Ответ 3

Белые пробелы и разрывы строк являются основными проблемами при использовании: пустого селектора. Осторожно, в CSS: пустой псевдокласс ведет себя одинаково. Мне нравится этот метод:

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

Ответ 4

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

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

Ответ 5

!elt.hasChildNodes()

Да, я знаю, это не jQuery, поэтому вы можете использовать это:

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

Счастлив сейчас?

Ответ 6

Если "пустой" означает "без содержимого HTML",

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

Ответ 7

Пустое как в не содержит текст?

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

Ответ 8

Другая опция, которая должна требовать меньше "работы" для браузера, чем html() или children():

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

Ответ 9

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

или

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

Ответ 11

Здесь фильтр jQuery, основанный на fooobar.com/questions/26542/...

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

Ответ 12

JavaScript

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.
​

Ответ 13

Попробуйте следующее:

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

Ответ 14

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

}

Ответ 15

Вы можете попробовать:

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

* Заменить белые пробелы, просто выставить;)

Ответ 16

Разрывы строк рассматриваются как контент для элементов в FF.

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

Пример:

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

В IE оба divs считаются пустыми, в 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
    }
})