代码之家  ›  专栏  ›  技术社区  ›  Adam Lassek

如何区分生成的元素和选定的元素?

  •  0
  • Adam Lassek  · 技术社区  · 14 年前

    在jquery api或dom中,是否可以检查页面上是否存在元素?

    考虑这两个变量:

    var selected = $('span#mySpan');
    var created = $('<span id="mySpan">Testing</span>');
    

    两者都将返回包含SPAN元素的jQuery对象。有没有办法告诉我们第一个存在于页面上,而第二个不存在?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Anurag    14 年前

    尝试

    $(created).parents("html").length
    

    以下是实现这一点的更多方法:

    $(document).find(created).length
    $(created).parents(document).length
    

    或使用 contains 为此任务生成的方法。它只接受DOM节点,因此我们需要从jquery对象中解包它。

    $.contains(document, created.get(0))
    

    一个纯粹的dom方法是使用 Node.compareDocumentPosition 方法。在上面的例子中,

    // get the DOM node
    var createdNode = created.get(0);
    var position = document.compareDocumentPosition(createdNode);
    var isNotInDocument = (position & Node.DOCUMENT_POSITION_DISCONNECTED) != 0;
    
        2
  •  0
  •   Justin Summerlin    14 年前

    除了对底层DOMAPI进行某种扩展之外,我唯一能想到的方法是获取整个DOM树的副本,然后与之进行比较。

    在您的示例中,您的第二个跨度是否没有父级?在有效的HTML中,跨度应始终具有父级。像这样的规则,假设有效的HTML/XHTML,可能会有用。