Bagaimana cara memeriksa apakah elemen HTML kosong menggunakan jQuery?

336

Saya mencoba memanggil fungsi hanya jika elemen HTML kosong, menggunakan jQuery.

Sesuatu seperti ini:

if (isEmpty($('#element'))) {
    // do something
}
vitto
sumber
$('#elem').text().match(/\S/) || alert('empty');
Thielicious

Jawaban:

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

untuk info lebih lanjut lihat http://api.jquery.com/is/ dan http://api.jquery.com/empty-selector/

EDIT:

Seperti yang telah ditunjukkan beberapa orang, interpretasi browser dari elemen kosong dapat bervariasi. Jika Anda ingin mengabaikan elemen yang tidak terlihat seperti spasi dan jeda baris dan membuat implementasi lebih konsisten Anda dapat membuat fungsi (atau cukup gunakan kode di dalamnya).

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

Anda juga bisa membuatnya menjadi plugin jQuery, tetapi Anda mendapatkan idenya.

Emil
sumber
56
Jeda baris dianggap sebagai konten untuk elemen dalam FF dan Chrome.
Corneliu
@Orneliu benar. Saya memposting jawaban di bawah ini yang mempertimbangkannya. Ini adalah sumber frustrasi utama bagi saya pada proyek baru-baru ini
DMTintner
2
Ini brilian :-D
jasonbradberry
Komentar HTML juga dianggap sebagai konten.
Paolo
Melakukan ini dengan suatu fungsi tentu saja menyenangkan, tetapi jika Anda menginginkannya lebih "tertanam" (dan sedikit menantang), saya akan merekomendasikan memanipulasi prototipe jQuery atau menggunakan kemampuan fungsi "filter" hebat JQ ...
TheCuBeMan
117

Saya menemukan ini sebagai satu-satunya cara yang dapat diandalkan (karena Chrome & FF menganggap spasi putih dan linebreak sebagai elemen):

if($.trim($("selector").html())=='')
Serge Shultz
sumber
20
Versi yang sedikit lebih terkompresi dapat memanfaatkan if(!$.trim($("selector").html())
kepalsuan
11
Saya tidak berpikir mereka menganggap mereka "elemen", tetapi mereka menganggap mereka node, yang IMO benar. Anda juga bisa melakukan if($("selector").children().length === 0)atau if($("selector > *").length === 0).
panzi
1
Saya pikir Anda membingungkan "elemen" dengan "node".
1
$ ("selector"). html (). trim () === ''
user1156544
1
Saya tidak tahu mengapa tetapi metode dari jawaban ini: if ($. Trim ($ ("selector"). Html ()) == '') bekerja. .is (': kosong') tidak!
Zeljko Miloradovic
62

Ruang putih dan jeda baris adalah masalah utama dalam menggunakan: selector kosong. Hati-hati, dalam CSS, kelas pseudo kosong berperilaku dengan cara yang sama. Saya suka metode ini:

if ($someElement.children().length == 0){
     someAction();
}
DMTintner
sumber
4
Saya memilih itu di atas karena saya punya komentar HTML di DIV saya.
Paolo
2
Sejauh ini solusi yang paling elegan, harus menjadi jawaban yang benar.
Christoffer Bubach
6
Catatan yang $.children()tidak mengembalikan teks atau komentar node, yang berarti solusi ini hanya memeriksa apakah elemen kosong dari elemen . Jika elemen yang hanya berisi teks atau komentar tidak boleh dianggap kosong untuk kebutuhan Anda, maka Anda harus menggunakan salah satu solusi lain.
sierrasdetandil
@sierrasdetandil untuk selectelemen sempurna. kondisinya juga bisa if(! $el.children().length).
CPHPython
28
!elt.hasChildNodes()

Ya, saya tahu, ini bukan jQuery, jadi Anda bisa menggunakan ini:

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

Bahagia sekarang?


sumber
1
+1 Saya menggunakan pendekatan Anda di dalam filterfungsi jQuery karena saya tidak ingin menggunakan jQuery di dalam fungsi kecuali diperlukan.
WynandB
1
Jika saya menganggap spasi kosong saja <div class="results"> </div>, pernyataan ini akan mengembalikan false. jsfiddle.net/ytliuSVN/0pdwLt46
Penny Liu
19
jQuery.fn.doSomething = function() {
   //return something with 'this'
};

$('selector:empty').doSomething();
AlienWebguy
sumber
Bagus! Saya suka konstruksi tanpa seandainya.
Nikolay Fominyh
setuju sepenuhnya dengan @Nikolay, Ini tidak berguna untuk situasi spesifik saya, tetapi saya akan mengingatnya untuk masa depan!
vitto
baik, ini tidak akan berhasil ketika Anda harus menerapkan 'ini'
Zeal Murapa
Apa lagi thisselain elemen jQuery @ZealMurapa?
AlienWebguy
12

Jika dengan "kosong", maksud Anda tanpa konten HTML,

if($('#element').html() == "") {
  //call function
}
Pesawat Digital
sumber
Hati-hati, spasi dan jeda baris dapat menyebabkan html tidak == '' tetapi elemen masih kosong. Periksa jawaban saya di bawah ini untuk solusi lain
DMTintner
8

Kosong seperti di tidak mengandung teks?

if (!$('#element').text().length) {
    ...
}
jensgram
sumber
Ini tidak membahas elemen yang isinya adalah gambar (jangan tanya bagaimana saya membuat itu ...)
Bad Request
@BadRequest Tidak, maka tanda tanya setelah "seperti di tidak mengandung teks ?" :)
jensgram
7

Dalam resume, ada banyak opsi untuk mengetahui apakah suatu elemen kosong:

1- Menggunakan html:

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

2- Menggunakan text:

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

3 - Menggunakan is(':empty'):

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

4- Menggunakan length

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

Dalam kecanduan jika Anda mencoba mencari tahu apakah elemen input kosong, Anda dapat menggunakan val:

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

Opsi lain yang harus lebih sedikit "berfungsi" untuk browser daripada html()atau children():

function isEmpty( el ){
  return !el.has('*').length;
}
dahlbyk
sumber
1
document.getElementById("id").innerHTML == "" || null

atau

$("element").html() == "" || null
MayorMonty
sumber
0

Anda dapat mencoba:

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

* Ganti ruang putih, cukup memetikan;)

Marc Uberstein
sumber
Tidak akan !/[\S]/.test($('Selector').html())bekerja lebih baik, setelah Anda menemukan spasi putih Anda tahu itu tidak kosong
qwertymk
Mengapa / i di flag regex? Apakah ada versi huruf besar dan kecil dari karakter spasi?
Alexis Wilke
terima kasih, perbarui jawaban saya. Saya tidak tahu mengapa saya menambahkan / i
Marc Uberstein
1
@RobertMallow, Mungkin regex mendukung \ S, namun, Unicode mendefinisikan spasi putih sebagai Cc, Zs, Zl, Zp seperti yang ditunjukkan di sini: unicode.org/Public/UNIDATA/PropList.txt - huruf besar adalah Lu ...
Alexis Wilke
1
@RobertMallow, juga The production CharacterClassEscape :: S evaluates by returning the set of all characters not included in the set returned by CharacterClassEscape :: s.dari ecma-international.org/ecma-262/5.1/#sec-15.10.2.12
Alexis Wilke
-1
if($("#element").html() === "")
{

}
Alex
sumber
-1

Berikut ini adalah filter jQuery berdasarkan https://stackoverflow.com/a/6813294/698289

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

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
}

coba gunakan semua ini!

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

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

Coba ini:

if (!$('#el').html()) {
    ...
}
Syed
sumber
-2

Jeda baris dianggap sebagai konten untuk elemen dalam FF.

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

Ex:

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

Di IE kedua div dianggap kosong, di FF an Chrome hanya yang terakhir kosong.

Anda dapat menggunakan solusi yang disediakan oleh @qwertymk

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

atau

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