Làm cách nào để kiểm tra xem một phần tử HTML có trống không khi sử dụng jQuery?


336

Tôi đang cố gắng gọi một hàm chỉ khi một phần tử HTML trống, sử dụng jQuery.

Một cái gì đó như thế này:

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

$('#elem').text().match(/\S/) || alert('empty');
Thielicy

Câu trả lời:


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

để biết thêm thông tin, hãy xem http://api.jquery.com/is/http://api.jquery.com/empty-selector/

BIÊN TẬP:

Như một số người đã chỉ ra, việc giải thích trình duyệt của một yếu tố trống có thể khác nhau. Nếu bạn muốn bỏ qua các phần tử vô hình như dấu cách và dấu ngắt dòng và làm cho việc triển khai trở nên nhất quán hơn, bạn có thể tạo một hàm (hoặc chỉ sử dụng mã bên trong nó).

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

Bạn cũng có thể biến nó thành một plugin jQuery, nhưng bạn có ý tưởng.


56
Ngắt dòng được coi là nội dung cho các thành phần trong FF và Chrome.
Corneliu

@Corneliu đúng. Tôi đã đăng một câu trả lời dưới đây để xem xét điều đó. Đây là một nguồn thất vọng lớn đối với tôi trong một dự án gần đây
DMTintner

2
Điều này thật tuyệt vời :-D
jasonbradberry

Nhận xét HTML cũng được coi là nội dung.
Paolo

Tất nhiên, làm điều này với một chức năng là tốt, nhưng nếu bạn muốn nó được "nhúng" hơn (và một chút thách thức), tôi khuyên bạn nên thao tác nguyên mẫu của jQuery hoặc sử dụng khả năng chức năng "bộ lọc" tuyệt vời của JQ ...
TheCuBeMan

117

Tôi thấy đây là cách đáng tin cậy duy nhất (vì Chrome & FF coi khoảng trắng và ngắt dòng là các yếu tố):

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

20
Một phiên bản nén hơn một chút có thể tận dụng lợi thế của chuỗi trống: if(!$.trim($("selector").html())
Brandon Belvin

11
Tôi không nghĩ họ coi họ là "yếu tố", nhưng họ coi họ là các nút, đó là IMO chính xác. Bạn cũng có thể làm if($("selector").children().length === 0)hoặc if($("selector > *").length === 0).
panzi

1
Tôi nghĩ bạn đang nhầm lẫn giữa "các phần tử" với "các nút".

1
$ ("bộ chọn"). html (). trim () === ''
user1156544

1
Tôi không biết tại sao nhưng phương pháp từ câu trả lời này: if ($. Trim ($ ("bộ chọn"). Html ()) == '') đã hoạt động. .is (': trống') đã không!
Zeljko Miloradovic

62

Khoảng trắng và ngắt dòng là các vấn đề chính khi sử dụng: bộ chọn trống. Cẩn thận, trong CSS, lớp giả rỗng hoạt động theo cùng một cách. Tôi thích phương pháp này:

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

4
Tôi đã chọn ở trên vì tôi có nhận xét HTML trong DIV của mình.
Paolo

2
Cho đến nay, giải pháp thanh lịch nhất, nên là câu trả lời chính xác.
Christoffer Bubach

6
Lưu ý rằng $.children()không trả về các nút văn bản hoặc nút nhận xét, có nghĩa là giải pháp này chỉ kiểm tra là phần tử trống của các phần tử . Nếu một yếu tố chỉ chứa văn bản hoặc bình luận không nên được coi là trống cho nhu cầu của bạn, thì bạn nên sử dụng một trong những giải pháp khác.
sierrasdetandil

@sierrasdetandil cho selectcác yếu tố là hoàn hảo. điều kiện cũng có thể được if(! $el.children().length).
CPHPython

28
!elt.hasChildNodes()

Vâng, tôi biết, đây không phải là jQuery, vì vậy bạn có thể sử dụng cái này:

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

Đang hạnh phúc?


1
+1 Tôi đã sử dụng cách tiếp cận của bạn bên trong filterhàm jQuery vì tôi không muốn sử dụng jQuery bên trong hàm trừ khi cần thiết.
WynandB

1
Nếu tôi coi chỉ khoảng trắng là trống <div class="results"> </div>, câu lệnh này sẽ trả về false. jsfiddle.net/ytliuSVN/0pdwLt46
Penny Liu

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

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

Tuyệt quá! Tôi thích các công trình xây dựng mà không có ifs.
Nikolay Fominyh

hoàn toàn đồng ý với @Nikolay, Nó không hữu ích cho tình huống cụ thể của tôi nhưng tôi sẽ nhớ nó cho tương lai!
vitto

tốt, điều này sẽ không hoạt động khi bạn phải áp dụng 'cái này'
Zeal Murapa

Còn gì khác thisngoài yếu tố jQuery @ZealMurapa?
AlienWebguy 14/2/2015

12

Nếu "trống", bạn có nghĩa là không có nội dung HTML,

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

cẩn thận, khoảng trắng và ngắt dòng có thể khiến html không == '' nhưng phần tử vẫn trống. Kiểm tra câu trả lời của tôi dưới đây để biết giải pháp khác
DMTintner

8

Trống rỗng như trong không chứa văn bản?

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

Điều này không giải quyết các yếu tố có nội dung là hình ảnh (đừng hỏi làm thế nào tôi nghĩ ra điều đó ...)
Yêu cầu xấu

@BadRequest Không, do đó, dấu hỏi sau "như trong không chứa văn bản ?" :)
jensgram

7

Trong sơ yếu lý lịch, có nhiều tùy chọn để tìm hiểu xem một phần tử có trống không:

1- Sử dụng html:

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

2- Sử dụng text:

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

3- Sử dụng is(':empty'):

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

4- Sử dụng length

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

Trong nghiện nếu bạn đang cố gắng tìm hiểu xem một yếu tố đầu vào có trống không, bạn có thể sử dụng val:

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

2

Một tùy chọn khác cần ít "công việc" hơn cho trình duyệt hơn html()hoặc children():

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

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

hoặc là

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

0

Bạn co thể thử:

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

* Thay thế khoảng trắng, chỉ cần incase;)


Sẽ không !/[\S]/.test($('Selector').html())hoạt động tốt hơn, khi bạn tìm thấy một số khoảng trắng bạn biết nó không trống
qwertymk

Tại sao / i trong cờ regex? Có phiên bản chữ hoa và chữ thường của ký tự không gian không?
Alexis Wilke

cảm ơn, cập nhật câu trả lời của tôi Tôi không biết tại sao tôi lại thêm / i
Marc Uberstein

1
@RobertMallow, Có thể regex hỗ trợ \ S, tuy nhiên, Unicode định nghĩa các khoảng trắng là Cc, Zs, Zl, Zp như được hiển thị ở đây: unicode.org/Public/UNIDATA/PropList.txt - chữ hoa là Lu ...
Alexis Wilke

1
@RobertMallow, cũng The production CharacterClassEscape :: S evaluates by returning the set of all characters not included in the set returned by CharacterClassEscape :: s.từ ecma
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
}

Hãy thử sử dụng bất kỳ thứ này!

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

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

-1

Thử cái này:

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

-2

Ngắt dòng được coi là nội dung cho các yếu tố trong FF.

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

Ví dụ:

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

Trong IE cả hai div đều được coi là trống, trong FF chỉ có Chrome cuối cùng là trống.

Bạn có thể sử dụng giải pháp được cung cấp bởi @qwertymk

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

hoặc là

$('.elements').each(function(){  // for many elements
    if(!/[\S]/.test($(this).html())) { 
        // is empty
    }
})
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.