如何使用 jQuery 检查 HTML 元素是否为空?

IT技术 javascript jquery
2021-01-17 00:07:59

我试图仅在 HTML 元素为空时才使用 jQuery 调用函数。

像这样的东西:

if (isEmpty($('#element'))) {
    // do something
}
6个回答
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 插件,但你明白了。

这太棒了:-D
2021-03-15 00:07:59
用函数来做这件事当然很好,但是如果你想要它更“嵌入”(并且有点挑战),我会建议操纵 jQuery 的原型或使用 JQ 伟大的“过滤器”功能能力......
2021-03-26 00:07:59
换行符被视为 FF 和 Chrome 中元素的内容。
2021-03-28 00:07:59
HTML 注释也被视为内容。
2021-04-06 00:07:59
@Corneliu 是正确的。我在下面发布了一个考虑到这一点的答案。这是我在最近的一个项目中感到沮丧的一个主要原因
2021-04-10 00:07:59

我发现这是唯一可靠的方法(因为 Chrome 和 FF 将空格和换行符视为元素):

if($.trim($("selector").html())=='')
我认为您将“元素”与“节点”混淆了。
2021-03-14 00:07:59
$("选择器").html().trim() === ''
2021-03-14 00:07:59
我不认为他们认为它们是“元素”,但他们认为它们是节点,这是 IMO 正确的。你也可以做if($("selector").children().length === 0)if($("selector > *").length === 0)
2021-03-31 00:07:59
我不知道为什么,但是这个答案中的方法: if($.trim($("selector").html())=='') 有效。.is(':empty') 没有!
2021-04-06 00:07:59
稍微压缩的版本可以利用空字符串的虚假性: if(!$.trim($("selector").html())
2021-04-11 00:07:59

空格和换行符是使用 :empty 选择器的主要问题。小心,在 CSS 中 :empty 伪类的行为方式相同。我喜欢这个方法:

if ($someElement.children().length == 0){
     someAction();
}
到目前为止,最优雅的解决方案应该是正确的答案。
2021-03-15 00:07:59
我选择上面那个是因为我的 DIV 中有 HTML 注释。
2021-03-28 00:07:59
@sierrasdetandil 对于select元素来说是完美的。条件还可以if(! $el.children().length)
2021-03-30 00:07:59
请注意,$.children()不返回文本或注释节点,这意味着此解决方案仅检查元素是否为空元素如果仅包含文本或注释的元素应该被视为满足您的需要为空,那么您应该使用其他解决方案之一。
2021-04-05 00:07:59
!elt.hasChildNodes()

是的,我知道,这不是 jQuery,所以你可以使用它:

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

现在开心?

@PennyLiu 这是正确的,因为空格是HTML 文档中文本节点
2021-03-12 00:07:59
如果我认为 whitespace-only 为 empty <div class="results"> </div>,则此语句将返回 false。jsfiddle.net/ytliuSVN/0pdwLt46
2021-03-15 00:07:59
+1 我在 jQueryfilter函数中使用了你的方法,因为除非必要,否则我不想在函数中使用 jQuery。
2021-03-31 00:07:59
jQuery.fn.doSomething = function() {
   //return something with 'this'
};

$('selector:empty').doSomething();
好吧,当您必须应用“this”时,这将不起作用
2021-03-13 00:07:59
完全同意@Nikolay,它对我的​​特定情况没有用,但我会记住它以备将来使用!
2021-03-23 00:07:59
伟大的!我喜欢没有ifs的结构。
2021-04-01 00:07:59
this除了 jQuery 元素 @ZealMurapa 之外还有什么
2021-04-05 00:07:59