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
}

$('#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.


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())=='')

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();
}

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?


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();

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
}

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) {
    ...
}

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
}

2

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

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

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

atau

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

0

Anda dapat mencoba:

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

* Ganti ruang putih, cukup memetikan;)


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

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.

-1

Coba ini:

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

-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
    }
})
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.