अगर jQuery का उपयोग करके HTML तत्व खाली है तो मैं कैसे जांच करूं?


336

मैं केवल एक फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं यदि jQuery का उपयोग करके एक HTML तत्व खाली है।

कुछ इस तरह:

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

$('#elem').text().match(/\S/) || alert('empty');
थिएलस

जवाबों:


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

अधिक जानकारी के लिए http://api.jquery.com/is/ और http://api.jquery.com/empty-selector/ देखें

संपादित करें:

जैसा कि कुछ ने बताया है, एक खाली तत्व की ब्राउज़र व्याख्या अलग-अलग हो सकती है। यदि आप रिक्त स्थान और लाइन ब्रेक जैसे अदृश्य तत्वों को अनदेखा करना चाहते हैं और कार्यान्वयन को अधिक सुसंगत बना सकते हैं, तो आप एक फ़ंक्शन बना सकते हैं (या बस इसके अंदर कोड का उपयोग करें)।

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

आप इसे jQuery प्लगइन में भी बना सकते हैं, लेकिन आपको इसका विचार है।


56
एफएफ और क्रोम में तत्वों को लाइन ब्रेक माना जाता है।
कॉर्नेलियू

@ कोर्नेलियु सही है। मैंने नीचे एक उत्तर पोस्ट किया है जो उस पर विचार करता है। हाल ही में एक प्रोजेक्ट
DMTintner

2
यह शानदार है :-D
jasonbradberry

HTML टिप्पणियों को भी सामग्री माना जाता है।
पाओलो

किसी फ़ंक्शन के साथ ऐसा करना निश्चित रूप से अच्छा है, लेकिन यदि आप इसे अधिक "एम्बेडेड" (और थोड़ा चुनौतीपूर्ण) चाहते हैं, तो मैं jQuery के प्रोटोटाइप में हेरफेर करने या JQ के महान "फ़िल्टर" फ़ंक्शन क्षमता का उपयोग करने की
सलाह दूंगा

117

मुझे यह एकमात्र विश्वसनीय तरीका लगा (क्योंकि Chrome & FF व्हाट्सएप और लाइनब्रेक को तत्वों के रूप में मानते हैं):

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

20
थोड़ा और संकुचित संस्करण खाली स्ट्रिंग के मिथ्या-नेस का लाभ उठा सकता है: if(!$.trim($("selector").html())
ब्रैंडन बेल्विन

11
मुझे नहीं लगता कि वे उन्हें "तत्व" मानते हैं, लेकिन वे उन्हें नोड्स मानते हैं, जो आईएमओ सही है। आप भी कर सकते हैं if($("selector").children().length === 0)या if($("selector > *").length === 0)
पणजी

1
मुझे लगता है कि आप "तत्वों" को "नोड्स" के साथ भ्रमित कर रहे हैं।

1
$ ("चयनकर्ता")। html ()। ट्रिम () === ''
user1156544

1
मुझे नहीं पता कि क्यों लेकिन इस जवाब से विधि: अगर ($ ट्रिम ($ ("चयनकर्ता")। html) () == '') ने काम किया। .is (': खाली') नहीं किया!
जेल्को मिलोरादोविक

62

रिक्त स्थान का उपयोग करने के साथ सफेद स्थान और लाइन ब्रेक मुख्य मुद्दे हैं। सीएसएस में सावधान: खाली छद्म वर्ग उसी तरह का व्यवहार करता है। मुझे यह तरीका पसंद है:

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

4
मैंने उसे ऊपर चुना क्योंकि मेरे DIV में HTML टिप्पणियां थीं।
पाओलो

2
अब तक सबसे सुरुचिपूर्ण समाधान, सही उत्तर होना चाहिए।
क्रिस्टोफ़र बुबाच

6
ध्यान दें कि $.children()पाठ या टिप्पणी नोड्स वापस नहीं करता है, जिसका अर्थ है कि यह समाधान केवल जांचता है कि तत्व तत्वों से खाली है । यदि एक तत्व जिसमें केवल पाठ या टिप्पणियां शामिल हैं, उसे आपकी आवश्यकताओं के लिए खाली नहीं माना जाना चाहिए, तो आपको अन्य समाधानों में से एक का उपयोग करना चाहिए।
सिरासद्देतंडिल

selectतत्वों के लिए @sierrasdetandil एकदम सही है। हालत भी हो सकता है if(! $el.children().length)
CPHPython

28
!elt.hasChildNodes()

हाँ, मुझे पता है, यह jQuery नहीं है, इसलिए आप इसका उपयोग कर सकते हैं:

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

अब खुश?


1
+1 filterजब तक मैं आवश्यक न हो तब तक मैंने jQuery फ़ंक्शन के अंदर अपने दृष्टिकोण का उपयोग किया क्योंकि मैं फ़ंक्शन के अंदर jQuery का उपयोग नहीं करना चाहता था।
WynandB

1
यदि मैं व्हाट्सएप-केवल को खाली मानता हूं <div class="results"> </div>, तो यह कथन गलत होगा। jsfiddle.net/ytliuSVN/0pdwLt46
पेनी लियू

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

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

महान! मुझे इफ्स के बिना कंस्ट्रक्शन पसंद है।
निकोले फोमिनीह

पूरी तरह से @Nikolay से सहमत हैं, यह मेरी विशिष्ट स्थिति के लिए उपयोगी नहीं है, लेकिन मैं इसे भविष्य के लिए याद रखूंगा!
विट्टो

ठीक है, यह तब काम नहीं करेगा जब आपको
उत्साह मुरपा

thisJQuery तत्व @ZealMurapa के अलावा और क्या होगा ?
एलियनवेबगि

12

यदि "खाली" द्वारा, आप बिना HTML सामग्री के,

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

सावधान, व्हाट्सएप और लाइन ब्रेक के कारण html को == '' नहीं हो सकता है, लेकिन तत्व अभी भी खाली है। एक अन्य समाधान के लिए नीचे मेरे उत्तर की जाँच करें
DMTintner

8

में कोई पाठ शामिल नहीं है?

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

यह उन तत्वों को संबोधित नहीं करता है जिनकी सामग्री छवियां हैं (यह मत पूछें कि मैं उसके साथ कैसे आया ...)
खराब अनुरोध

@ ब्रैडेस्टेस्ट नं, इसलिए प्रश्न के बाद "जैसा कि कोई पाठ शामिल नहीं है ?" :)
जेन्सग्राम

7

फिर से शुरू करने में, यह पता लगाने के लिए कई विकल्प हैं कि क्या कोई तत्व खाली है:

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- उपयोग करना length

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

व्यसन में अगर आप यह जानने की कोशिश कर रहे हैं कि क्या कोई इनपुट तत्व खाली है तो आप इसका उपयोग कर सकते हैं val:

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

2

एक अन्य विकल्प है कि कम "काम" की तुलना में ब्राउज़र के लिए आवश्यकता होती है चाहिए html()या children():

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


0

तुम कोशिश कर सकते हो:

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

* सफेद रिक्त स्थान बदलें, बस उकसाना;)


नहीं चाहेंगे !/[\S]/.test($('Selector').html()), बेहतर काम करने से व्हाइटस्पेस क्या आप जानते हैं इसे खाली नहीं कर रहा है एक बार आप कुछ मिल जाए
qwertymk

रेगेक्स के झंडे में / i क्यों? क्या अंतरिक्ष चरित्र के ऊपरी और निचले मामले संस्करण हैं?
एलेक्सिस विलके

धन्यवाद, मेरा जवाब अपडेट किया गया। मुझे नहीं पता कि मैंने जोड़ा क्यों है / i
मार्क उबेरस्टीन

1
@RobertMallow, हो सकता है कि regex का समर्थन करता है \ एस, तथापि, यूनिकोड प्रतिलिपि, Zs, Zl, जिला परिषद के रूप में व्हाइटस्पेस जैसा कि यहाँ दिखाया परिभाषित करता है: unicode.org/Public/UNIDATA/PropList.txt - अपर केस लू है ...
एलेक्सिस विके

1
@RobertMallow, यह भी The production CharacterClassEscape :: S evaluates by returning the set of all characters not included in the set returned by CharacterClassEscape :: s.से ecma-international.org/ecma-262/5.1/#sec-15.10.2.12
एलेक्सिस विके




-1

जावास्क्रिप्ट

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.


-2

एफएफ में तत्वों को लाइन ब्रेक माना जाता है।

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

उदाहरण के लिए:

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

IE में दोनों div को खाली माना जाता है, FF में क्रोम केवल एक अंतिम खाली होता है।

आप @qwertymk द्वारा दिए गए समाधान का उपयोग कर सकते हैं

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

या

$('.elements').each(function(){  // for many elements
    if(!/[\S]/.test($(this).html())) { 
        // is empty
    }
})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.