17 ответов:
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, но вы получите идею.
Я обнаружил, что это единственный надежный способ (поскольку Chrome & FF рассматривает пробелы и разрывы строк как элементы):
if($.trim($("selector").html())=='')
пробелы и разрывы строк являются основными проблемами при использовании :пустой селектор. Осторожно, в CSS :пустой псевдо-класс ведет себя так же. Мне нравится этот метод:
if ($someElement.children().length == 0){ someAction(); }
!elt.hasChildNodes()Да, я знаю, это не jQuery, так что вы могли бы использовать это:
!$(elt)[0].hasChildNodes()теперь счастлив?
jQuery.fn.doSomething = function() { //return something with 'this' }; $('selector:empty').doSomething();
Если под "пустым" вы подразумеваете без содержимого HTML,
if($('#element').html() == "") { //call function }
в резюме есть много вариантов, чтобы узнать, если элемент пуст:
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 - с помощью
lengthif (!$('p#element').length){ // paragraph with id="element" is empty, your code goes here }в зависимости, если вы пытаетесь выяснить, если элемент input пуст, вы можете использовать
val:if (!$.trim($('input#element').val())) { // input with id="element" is empty, your code goes here }
еще один вариант, который должен требовать меньше "работы" для браузера, чем
html()илиchildren():function isEmpty( el ){ return !el.has('*').length; }
можно попробовать:
if($('selector').html().toString().replace(/ /g,'') == "") { //code here }*заменить пробелы, просто Incase ;)
вот фильтр jQuery на основе https://stackoverflow.com/a/6813294/698289
$.extend($.expr[':'], { trimmedEmpty: function(el) { return !$.trim($(el).html()); } });
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.
разрывы строк рассматриваются как содержимое элементов в FF.
<div> </div> <div></div>Ex:
$("div:empty").text("Empty").css('background', '#ff0000');в IE оба дива считаются пустыми,в 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 } })
Comments