【问题标题】:jQuery detect already rendered element?jQuery检测已经渲染的元素?
【发布时间】:2017-08-05 17:41:52
【问题描述】:

我需要编写一些函数来检测任何 jquery 选择器:是否已经存在于 DOM 中。 我该怎么做。

如果元素渲染了它必须返回true,如果元素没有渲染它必须返回false。

可能的选择器:

'<div />'  // text jquery selected will converted to $('<div />') 
$('<div />') // simple jquery selector such as jQuery('<div />')
'#somediv' or .somediv // already rendered DOM element

isDomExists('&lt;div /&gt;') => 错误

isDomExists($('&lt;div /&gt;')) => 错误

isDomExists($('#somediv')) => 是的

【问题讨论】:

  • if($(selector).length > 0){ // dom 存在 }
  • 不,$('
    ').length 返回 1。这是不正确的!我需要检查 DOM 中的元素...
  • 如果你正在寻找一个 DIV,只需使用 $('div')
  • 使用$.contains

标签: javascript jquery html


【解决方案1】:

这将为文档中当前存在的元素以及匹配文档中元素的选择器返回 true。

function isInDoc(sel) {
    var $sel = jQuery(sel);
    return $sel.length && jQuery.contains(document.documentElement, $sel[0]);
}

【讨论】:

  • 真的很酷:jQuery.contains(document.documentElement, $sel[0]);
  • 您需要向函数发送特定元素,但是是的,看起来不错
  • @ShannonStrutz 你说的特定元素是什么意思?
  • 看看文档吧:api.jquery.com/jQuery 你在这里的方式,你给它一个选择器,“元素”。
  • 你可以给它发送一个选择器,一个dom元素,或者一个jQuery对象。据我了解,这就是 OP 所要求的。
【解决方案2】:

还可以查看节点的父节点数量, 没有父节点的节点不包含在 DOM 中:

http://jsfiddle.net/w6XZZ/

HTML:

<div id="mydiv"></div>

Javascript:

alert($("<div/>").parent().length);
alert($("#mydiv").parent().length);

【讨论】:

  • 它正在工作,但我不确定标签 html 是否有父...我认为@Vatev 的方式比它更好。
  • 节点可以有不在 DOM 中的父节点。在这种情况下,节点也不在 DOM 中。
  • 是的,我没想到。
【解决方案3】:

$('&lt;div /&gt;') 创建一个新的 DIV 元素(但不附加到 DOM)。你需要的是$('div').length == 0

【讨论】:

    【解决方案4】:

    你可以只使用 jquerys .ready()Documentation

    【讨论】:

    • $('&lt;div /&gt;').ready(function() { alert('ready??'); }); - 在 div 创建后触发(没有 dom 附加)。不好。
    • 等等,你想知道元素是什么时候创建的,但不是在 DOM 中?那么该元素在什么意义上呈现呢?如果它不在 DOM 中,则它不在页面上。标题不正确?
    • 是的,它没有显示在页面上...在 DOM 模型中创建,但不在页面节点中。我发布示例在我的问题中必须返回什么函数。
    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2023-03-19
    • 2010-10-06
    相关资源
    最近更新 更多