【问题标题】:JQuery: Check if element exists alongside '.remove()'JQuery:检查元素是否与'.remove()'一起存在
【发布时间】:2011-10-06 13:13:38
【问题描述】:

我知道您可以使用$('div').length 检查元素是否存在,但是当使用.remove() 销毁元素时,.length 仍然报告该 div 存在。我怎样才能知道它是否真的存在?

if ($('div').length) { 
  alert('yes') 
} else { 
  alert('no') 
}

【问题讨论】:

  • Err.. 不完全确定您的意思。如果您使用.remove(),则该元素将从 DOM 中删除。长度报告预期结果:jsfiddle.net/TmPBC
  • 只要页面上有一个 div,就会提示是。您可以使用 id 来测试是否删除了确切的元素。
  • $('div') 就是一个例子。我没有测试整个页面中是否有任何 div。
  • 有关“如何检查元素或其父元素之一是否被删除”的更一般的问题,请参阅How do I check whether a jQuery element is in the DOM?

标签: jquery exists


【解决方案1】:

exists,你的意思是你想看看它是否存在于dom中?检查“html”是否是祖先:

var $myDiv = $(".myDiv");
$myDiv.closest("html").length;  // returns 1
$myDiv.remove();
$myDiv.closest("html").length;  // returns 0

或使用.is("html *")。它返回一个布尔值,这很方便:

var $myDiv = $(".myDiv");
$myDiv.is("html *"); // returns true
$myDiv.remove();
$myDiv.is("html *"); // returns false

【讨论】:

  • 如果有任何区别,.closest() 将是最有效的。根据.is() 的实现方式,它可能几乎与.closest() 一样高效,或者可能更糟。
【解决方案2】:

测试是否有父节点:

if ($element.parent().length) { alert('yes') }
else { alert('no') }

或者如果你有对 DOM 元素的引用:

if(element.parentNode) {
    // yes
}

显然,这只适用于您已经引用过的元素。

FWIW,元素本身仍然存在,只是它不是 DOM 树的一部分。

【讨论】:

  • 如果 $element 的任何父元素已从 DOM 中删除,这将不起作用。例如,$element.parent().remove()$element.parent().length 仍然是 1,即使 $element 不在 DOM 树中。
  • @gilly3:好吧,我假设.remove() 是对元素执行的,如问题中所述。无论如何,+1 你的解决方案,但我认为寻找 body 而不是 html 就足够了。
【解决方案3】:
if (!$foo.closest('html').length) {
    //Element is detached
}

如果元素的父元素之一被移除,这仍然有效(在这种情况下,元素本身仍然有父元素)。

我引用this answer

【讨论】:

    【解决方案4】:

    你可以在删除元素之前获取元素的父元素,在元素被删除之后你可以像这样检查!

        var parent = $(element).parent();
        $(element).remove();
    
        if(parent.children(element)) {  alert('yes'); }
        else { alert('no'); }
    

    当然元素是一些 jquery 选择器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-17
      • 2011-06-26
      • 2011-07-14
      • 2011-03-25
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      相关资源
      最近更新 更多